1、Spring中使用applicationContext对象
spring
public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) { applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } }
2、为何继承ApplicationContextAware就可使用applicationContext对象?app
使用后置处理器ide
3、什么是后置处理器?
后置处理器主要是对bean进行加强,包括在bean初始化前和初始化后进行加强,如修改bean属性、对bean的方法进行代理等。post
public interface BeanPostProcessor { // bean初始化前加强 default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } // bean初始化后加强 default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; }
4、后置处理器怎样调用setApplicationContext赋值?this
内置后置处理器:org.springframework.context.support.ApplicationContextAwareProcessorspa
class ApplicationContextAwareProcessor implements BeanPostProcessor public Object postProcessBeforeInitialization(final Object bean, String beanName) throws BeansException { else { invokeAwareInterfaces(bean); } return bean; } private void invokeAwareInterfaces(Object bean) { if (bean instanceof Aware) { // 对继承于ApplicationContextAware的bean调用setApplicationContext方法进行赋值 if (bean instanceof ApplicationContextAware) { ((ApplicationContextAware) bean).setApplicationContext(this.applicationContext); } } }
五、参考资料.net