在@Configuration中保持对bean的引用

时间:2015-07-06 19:39:38

标签: java spring spring-mvc dependency-injection spring-bean

我可以在@Configuration类中保留对公开bean的引用,以便以后可以在同一个bean上执行操作吗?例如:

@Configuration
class MyBeanConfiguration extends DisposableBean {
  private MyBean myBean; // Correct?

  @Bean
  public MyBean myBean() {
    return (this.myBean = MyBeanFactory.newMyBean());
  }

  @Override
  public void destroy() throws Exception {
    doSomethingWith(myBean);
  }
}

这种方法会遇到什么麻烦吗?

2 个答案:

答案 0 :(得分:0)

你可能会遇到麻烦。您可能不希望Configuration类扩展DisposableBean,而是MyBean扩展它并在destroy中实施MyBean方法。

或者,您可以像MyBean那样为@Bean(destroyMethod='mydestroy')配置自定义销毁方法:MyBean类不会对Spring产生硬依赖。

第三个选项是创建一个监听器,而不是实现ApplicationListener<ContextClosed>并自动装配MyBean到该类中,并在那里做一些事情。

答案 1 :(得分:0)

我有时会毫无问题地执行以下操作:

@Configuration
class MyBeanConfiguration implements DisposableBean {

  private @Autowired MyBean myBean;

  @Bean
  public MyBean myBean() {
    return MyBeanFactory.newMyBean();
  }

  @Override
  public void destroy() throws Exception {
    doSomethingWith(myBean);
  }

}

注意:我不知道这是不是一种糟糕的方法,而且只有在我无法控制MyBean类并且无法在那里实现DisposeableBean时才会这样做。