回复“面试手册”,获取本站PDF版
回复“简历”,获取高质量简历模板
回复“加群”,加入程序员交流群
回复“电子书”,获取程序员类电子书
BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。至于它们之间的关系,可以打开idea,查看它们的UML类图,如下,从可以看出ApplicationContext是BeanFactory的子接口
两者之间的区别:
作用
BeanFactory接口作用:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。
ApplicationContext接口作用:ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还有额外的功能
- 提供在监听器中注册bean的事件
- 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
- 同时加载多个配置文件
- 统一的资源文件访问方式
- 继承MessageSource,因此支持国际化
加载方式
BeanFactroy:采用的是延迟加载形式来注入Bean,也就是只有在使用到某个bean时,才会对该bean进行加载实例化,这样的弊端很明显,就是如果spring的配置存在问题,那么只有BeanFactory加载后,使用到这个bean时才可以发现问题。
ApplicationContext:ApplicationContext采用的是预加载机制,在容器启动时,一次性创建所有的bean。这种可以避免BeanFactory接口中出现的问题,容器启动时就可以发现Spring配置中存在的错误,但缺点是会占用内存空间,并且当配置的bean较多时,程序启动会变慢。
创建方式
BeanFactroy:采用编程的方式创建,如BeanFactory factory = new XmlBeanFactory (new ClassPathResource("beans.xml"));
ApplicationContext:除了采用编程的方式创建,还可以使用声明的方式创建,在web.xml文件添加如下代码
<!--指定Spring配置文件的位置,有多个配置文件时,以逗号分隔-->
<context-param>
<param-name>contextConfigLocation</param-name>
<!--spring将加载spring目录下的applicationContext.xml文件-->
<param-value>
classpath:spring/applicationContext.xml
</param-value>
</context-param>
<!--指定以ContextLoaderListener方式启动Spring容器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
注册方式
BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。
本站链接:https://www.mianshi.online,如需勘误或投稿,请联系微信:lurenzhang888
点击面试手册,获取本站面试手册PDF完整版