2016-12-21 55 views
1

當destroy被調用實現ApplicationContextAware的類時,我們可以調用getBean嗎?破壞時獲取Bean

class Abc implements ApplicationContextAware{ 

    private static ApplicationContext applicationContext = null; 
    MyTestClass obj = null; 
    public void destroy(){ 
     System.out.print("Calling destroy "); 
     obj = (MyTestClass)applicationContext.getBean("myTestClassObject"); 
     obj.showMsg(); // Calling show msg of MyTestClass. 
    } 
} 
+1

在上面的例子中'applicationContext'爲null,所以'applicationContext.getBean'會拋出一個NPE –

+1

其中是setApplicationContext方法?爲什麼你只是簡單地嘗試一下 – Panther

回答

1

是的,你可以在bean的生命週期結束之前調用它作爲銷燬調用。無論如何,上下文也將在此之後。請注意,您沒有將實際的應用程序上下文對象分配給您的應用程序上下文字段。沒有它,靜態實例變量將爲空。

class Abc implements ApplicationContextAware{ 

private static ApplicationContext applicationContext = null; 
MyTestClass obj = null; 

public void destroy(){ 
     System.out.print("Calling destroy "); 
     obj = (MyTestClass)applicationContext.getBean("myTestClassObject"); 
     obj.showMsg(); // Calling show msg of MyTestClass. 
} 

    public void setApplicationContext(ApplicationContext context) throws BeansException { 
     applicationContext = context; 
    } 
} 

注意,實施ApplicationContextAware,在不改變生命週期多。只有在初始化時纔會通過調用setApplicationContext方法來傳遞上下文對象。除此之外,你的bean是標準bean。

0

不,我不認爲它會允許,因爲銷燬被調用,所以它會拋出異常,目前的豆銷燬。