Spring之Bean实现了ApplicationContextAware等aware接口,对于setApplicationContext方法执行时间点的说明
2017-07-05 11:32
1551 查看
在Spring中,如果Bean对象实现了ApplicationContextAware接口,则Spring在完成Bean的初始化后,会将ApplicationContext上下文对象注入至该Bean对象中,注入方法为调用Bean的setApplicationContext方法,如:public class BeanAwareTest implement ApplicationContextAware {
private static ApplicationContext applicationContext;public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}}那么上面的setApplicationContext方法是什么时间被执行的呢? 我们通过对spring源码进行追踪,发现AbstractApplicationContext类中的prepareBeanFactory方法有一句
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
该方法中涉及一个类ApplicationContextAwareProcessor,该类中有初始化方法
postProcessBeforeInitialization中有一句this.invokeAwareInterfaces(bean),
而invokeAwareInterfaces方法的代码如下:
private void invokeAwareInterfaces(Object bean) { if(bean instanceof Aware) { if(bean instanceof EnvironmentAware) { ((EnvironmentAware)bean).setEnvironment(this.applicationContext.getEnvironment()); } if(bean instanceof EmbeddedValueResolverAware) { ((EmbeddedValueResolverAware)bean).setEmbeddedValueResolver(this.embeddedValueResolver); } if(bean instanceof ResourceLoaderAware) { ((ResourceLoaderAware)bean).setResourceLoader(this.applicationContext); } if(bean instanceof ApplicationEventPublisherAware) { ((ApplicationEventPublisherAware)bean).setApplicationEventPublisher(this.applicationContext); } if(bean instanceof MessageSourceAware) { ((MessageSourceAware)bean).setMessageSource(this.applicationContext); } if(bean instanceof ApplicationContextAware) { ((ApplicationContextAware)bean).setApplicationContext(this.applicationContext); } }
}示例调用序列图:
相关文章推荐
- 使用Spring的AOP实现接口方法执行时间记录
- 实现ApplicationContextAware的实例会自动调用setApplicationContext()方法
- org.springframework.context.ApplicationContextAware接口说明
- 使用Spring3.0的AOP结合log4j实现接口方法执行时间记录
- @SpringContext通过实现ApplicationContextAware接口动态获取bean
- 关于Spring几个特殊类的说明与备忘(BeanNameAware\ApplicationContextAware\InitializingBean\DisposableBean)
- 通过ApplicationContextAwareSpring实现手工加载配置的javabean
- Spring - 运行时获取bean(ApplicationContextAware接口)
- 通过ApplicationContextAwareSpring实现手工加载配置的javabean
- Spring中BeanFacory的模拟实现(ClassPathXMLApplicationContext)
- 对于spring实现bean信息定义目标-基于三种方法的思考
- Spring中ApplicationContextAware接口用法-->解决AppicationContext.getBean('xxxx')时初始化多次数据库连接池问题
- Spring ApplicationContextAware接口
- Spring ApplicationContext.xml配置的12个技巧和Bean属性说明
- spring读取applicationContext.xml获得BeanFactory的方法
- Spring bean 通过实现 InitializingBean ,DisposableBean 接口实现初始化方法和销毁前操作
- Spring ApplicationContext.xml配置的12个技巧和Bean属性说明
- static方法中调用接口,SpringContextUtil工具类实现
- Spring bean 通过实现 InitializingBean ,DisposableBean 接口实现初始化方法和销毁前操作
- spring aop 实现方法执行时间监控