在摧毁时获取Bean

时间:2016-12-21 05:04:20

标签: java spring

当调用实现ApplicationContextAware的类时,我们可以调用getBean吗?

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.
    }
}

2 个答案:

答案 0 :(得分:1)

是的,您可以在bean的生命周期结束之前将其称为destroy调用。无论如何,Context也会在此之后继续存在。请注意,您没有将实际的应用程序上下文对象分配给您的应用程序上下文字段。没有它,静态实例变量将为null。

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方法传递上下文对象。除此之外,你的豆是标准豆。

答案 1 :(得分:0)

不,我不认为它会允许,因为destroy被调用所以它会抛出当前bean被破坏的异常。