Spring源码解析之BeanFactory和ApplicationContext的区别

    xiaoxiao2022-07-02  111

    相同点:

    1.ApplicationContext间接继承了BeanFactory接口,在ClassPathXmlApplicationContext构造函数的源码中获取了BeanFactory,所以ApplicationContext拥有BeanFactory的所有功能(加载bean和获取bean的功能)。

    不同点:

    1.ApplicationContext提供的额外功能:

    增加SPEL语言的支持,类似于Struts2的OGNL表达式。增加了属性注册编辑器,由于XML配置文件中bean的类型都是String类型的,所以遇到Date等其他类型时,需要增加属性注册编辑器来转换类型,否则会报错。增加了几个特殊的内置类:EnvironmentAware,MessageSourceAware(国际化)增加了几个忽略自动装配的接口:BeanFactoryAware(实现此接口,可以直接获取BeanFactory对象),ResourceLoaderAware(通过url或者file来访问资源),ApplicationEventPublisherAware(消息发送、响应机制),ApplicationContextAware(直接获取ApplicationContext随对象)增加AspectJ来支持AOP功能

    2.实例化bean的区别:

    BeanFactory采用延迟加载实例,在程序中使用getBean("")才会实例化bean。ApplicationContext采用非延迟加载实例,意思就是说在解析xml配置文件时,就已经初始化并加载好各个bean实例,这样可以在程序启动时及时发现错误。

     

     

    参考:

    https://youyu4.iteye.com/blog/2346183

    https://www.cnblogs.com/wnlja/p/3907836.html

    最新回复(0)