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

相同点:

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

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

不同点:

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