Spring中為什么繼承了ApplicationContextAware接口就可以使用ApplicationContext對象?


1Spring中使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM