ApplicationContextAware執行時機


一、為什么需要ApplicationContextAware?

  在某些類中我們經常需要通過ApplicationContext來獲取需要的bean,但每一次使用new ClassPathXmlApplicationContext()都會重新裝配文件並實例化上下文bean,這樣肯定是很麻煩的,此時ApplicationContextAware接口的作用就體現出來了——spring會給實現此接口的類注入ApplicationContext對象

二、如何使用?

  通常我們是寫一個ApplicationContextUtil工具類

public class ApplicationContextUtil implements ApplicationContextAware {

    private static ApplicationContext context;
  
    public void setApplicationContext(ApplicationContext context)
            throws BeansException {
        this.context = context;
    }

    public static ApplicationContext getContext() {
        return context;
    }
}

三、spring何時注入上下文?

  

通過源碼跟蹤了解到AbstractApplicationContext.class下的refresh()方法中的prepareBeanFactory這句跟Aware有關,我們還可以看到:ApplicationContextAware是在spring初始化完bean后才注入上下文的

prepareBeanFactory方法中涉及到上圖紅圈圈這個類,此類中的方法postProcessBeforeInitialization調用了此類中的invokeAwareInterfaces方法:

看到沒,上圖畫圈圈的地方就是spring對實現ApplicationContextAware接口的類調用setApplicationContext進行上下文注入


免責聲明!

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



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