简述
ApplicationContext间接继承了BeanFacotry,ApplicationContext和BeanFacotry两者都是用于加载Bean的,但是相比之下,ApplicationContext提供了更多的扩展功能,简单一点说:ApplicationContext包含BeanFactory的所有功能。通常建议比BeanFactory优先,除非在一些限制的场合,比如字节长度对内存有很大的影响时(Applet)。绝大多数“典型的”企业应用和系统,ApplicationContext就是你需要使用的。
扩展点
org.springframework.context.support.AbstractApplicationContext#refresh方法几乎包含了ApplicationContext中提供的所有功能,比如:
1、ApplicationContext对BeanFacotry功能进行填充
@Qualifier与@Autowired应该是大家非常熟悉的注解,那么这两个注解正是在这一步骤中增加的支持。
2、继承MessageSource
为上下文初始化Message源,即对不同语言的消息体进行国际化处理。
3、BeanFactory的后处理
典型应用PropertyPlaceholderConfigurer,在spring中使用${xxx} 方式的配置引用,是通过后处理对引用变量进行处理。保证了BeanFactory会在实例化任何bean之前获得配置信息,从而能够正确解析bean描述文件中的变量引用。
4、spring事件发布
当完成ApplicationContext初始化的时候,要通过Spring中的事件发布机制来发出ContextRefreshedEvent事件,以保证对应的监听器可以做进一步的逻辑处理。