一、BeanFactory
BeanFactory是一个类工厂,可以创建并管理各种类的对象,在Spring框架中这些类的对象被称为Bean.在Spring中,Bean的含义更加广泛。BeanFactory可以说是Spring framework的心脏。
1、BeanFactory作为一个主接口不继承任何接口,暂且称为一级接口。
2、有3个子接口继承了它,进行功能上的增强。这3个子接口称为二级接口。
3、ConfigurableBeanFactory可以被称为三级接口,对二级接口HierarchicalBeanFactory进行了再次增强,它还继承了另一个外来的接口SingletonBeanRegistry
4、ConfigurableListableBeanFactory是一个更强大的接口,继承了上述的所有接口,无所不包,称为四级接口。
(这4级接口是BeanFactory的基本接口体系。继续,下面是继承关系的2个抽象类和2个实现类:)
5、AbstractBeanFactory作为一个抽象类,实现了三级接口ConfigurableBeanFactory大部分功能。
6、AbstractAutowireCapableBeanFactory同样是抽象类,继承自AbstractBeanFactory,并额外实现了二级接口AutowireCapableBeanFactory
7、DefaultListableBeanFactory继承自AbstractAutowireCapableBeanFactory,实现了最强大的四级接口ConfigurableListableBeanFactory,并实现了一个外来接口BeanDefinitionRegistry,它并非抽象类。
8、最后是最强大的XmlBeanFactory,继承自DefaultListableBeanFactory,重写了一些功能,使自己更强大。
二、ApplicationContext
从图上可以看出,ApplicationContext接口继承自LIstableBeanFactory接口和HirerarchicalBeanFactory接口。如果说BeanFactory是Spring framework的心脏,那么ApplicationContext便是Spring framework的骨架。
BeanFactory是IOC容器的底层实现。ApplicationContext接口继承了BeanFactory体系的大多数方法(bean可列性和BeanFactory的分层),同时派生的一些接口定义了一些与实际应用开发场合更加密切的方法。因此在实际应用开发中ApplicationContext要更加常用。
在配置文件中指定applicationContext.xml配置文件路径(缺省为在WEB/INF下,如果 不在此目录下必须显示指明)
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
ContextLoader实现了ServletContextListener接口,能够监听ServletContext事件。那么我们就可以利用ServletContextListener去监听ServletContext事件,当web应用启动的是时候,我们就将ApplicationContext装载到ServletContext中。因为所有的Servlet共享同一个ServletContext,可以很方便地获取ApplicationContext对象。
三、BeanFactory和ApplicationContext不同
对于所有的Bean,BeanFactory默认是在第一次被调用getBean()时才会进行初始化。
而ApplicationContext则是在容器启动时就对单实例Bean进行初始化,所以启动时间要稍长
对于单实例Bean无论是BeanFactory还是ApplicationContext都是只产生一个实例,并一直负责对其生命周期的管理。
网友评论