博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring中的BeanFactory与ApplicationContext的作用和区别?
阅读量:5854 次
发布时间:2019-06-19

本文共 2535 字,大约阅读时间需要 8 分钟。

作用:1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。

          2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:

                 a. 国际化支持

                       b. 资源访问:Resource rs = ctx. getResource(“classpath:config.properties”), “file:c:/config.properties”
                       c. 事件传递:通过实现ApplicationContextAware接口
                 3. 常用的获取ApplicationContext的方法:
                 FileSystemXmlApplicationContext:从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组
                 ClassPathXmlApplicationContext:从classpath的xml配置文件创建,可以从jar包中读取配置文件
                WebApplicationContextUtils:从web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者servlet来实现
              <listener>
              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
             </listener>
            <servlet>
            <servlet-name>context</servlet-name>
            <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
           <load-on-startup>1</load-on-startup>
             </servlet>
这两种方式都默认配置文件为web-inf/applicationContext.xml,也可使用context-param指定配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/myApplicationContext.xml</param-value>
</context-param>

 
Spring的IoC容器就是一个实现了BeanFactory接口的可实例化类。事实上,Spring提供了两种不同的容器:一种是最基本的BeanFactory,另一种是扩展的ApplicationContext。BeanFactory 仅提供了最基本的依赖注入支持,而 ApplicationContext 则扩展了BeanFactory ,提供了更多的额外功能。实例化这两种容器时是有区别的:
public class BeanFactoryTest {    public static void main(String[] args) throws Throwable{       ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();       Resource res = resolver.getResource("classpath:com/baobaotao/beanfactory/beans.xml");       System.out.println(res.getURL());       BeanFactory bf = new XmlBeanFactory(res);       System.out.println("init BeanFactory.");              Car car = bf.getBean("car",Car.class);       System.out.println("car bean is ready for use!");       car.introduce();    }}
public class XmlApplicationContextTest {    public static void main(String[] args) {
//如果配置文件放置在类路径下,用户可以优先使用ClassPathXmlApplicationContext实现类 ApplicationContext ctx = new ClassPathXmlApplicationContext("com/baobaotao/context/*.xml"); Car car1 = ctx.getBean("car",Car.class); //如果配置文件放置在文件系统的路径下,则可以优先考虑使用FileSystemXmlApplicationContext实现类// ctx = new FileSystemXmlApplicationContext("D:/masterSpring/chapter3/src/com/baobaotao/context/*.xml");// Car car2 = ctx.getBean("car",Car.class); }}

 ApplicationContext的初始化和BeanFactory有一个重大的区别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有的单实例的Bean。因此ApplicationContext的初始化时间会比BeanFactory稍长一些.

转载于:https://www.cnblogs.com/DreamDrive/p/4094502.html

你可能感兴趣的文章
构建之法读后感
查看>>
hdu题型分类
查看>>
基本信息项目目标文档
查看>>
DNN Web Platform 官方汉化版本 5.5
查看>>
移动开发Html 5前端性能优化指南
查看>>
UGUI 分页渐变居中效果
查看>>
silverlight style和template 使用之tip
查看>>
Eclipse配置python环境
查看>>
第十二周总结
查看>>
Import declarations are not supported by current JavaScript version--JavaScript版本不支持导入声明...
查看>>
js兼容性大全
查看>>
晶振不起振的原因及其解决方法
查看>>
学习目标
查看>>
《利用python进行数据分析》学习笔记--数据聚合与分组(groupby)
查看>>
C++中的函数指针模板
查看>>
2015年个人总结
查看>>
C#编程(六)------------枚举
查看>>
高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-2 发布
查看>>
ZOJ 3316 Game 一般图最大匹配带花树
查看>>
《系统架构师》——操作系统和硬件基础
查看>>