1、Spring中使用applicationContext對象
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對象?
使用后置處理器
3、什么是后置處理器?
后置處理器主要是對bean進行增強,包括在bean初始化前和初始化后進行增強,如修改bean屬性、對bean的方法進行代理等。
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賦值?
內置后置處理器:org.springframework.context.support.ApplicationContextAwareProcessor
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); } } }
5、參考資料
https://blog.csdn.net/baomw/article/details/84262006