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