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

相同点:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值