Java 在@Configuration中保留对bean的引用

Java 在@Configuration中保留对bean的引用,java,spring,spring-mvc,dependency-injection,spring-bean,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());

我是否可以在
@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);
  }
}

这种方法会给我带来麻烦吗?

你可能会遇到麻烦。可能您不希望您的
配置
类扩展
DisposableBean
,而是让
MyBean
扩展它并实现
MyBean
中的
Distroy
方法

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


第三种选择是创建一个监听器,然后实现
ApplicationListener
并将
MyBean
自动连接到该类中,并在该类中使用它做一些事情。

我有时会在没有任何问题的情况下执行以下操作:

@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
类并且无法在那里实现
DisposableBean
时才这样做。

他可能会遇到什么麻烦?@meriton——那么在他最初的代码示例中,
destroy
方法何时会被调用?可能只有当应用程序上下文被销毁时,而不是
Bean
本身被销毁时。另外,
Configuration
类应该用作声明bean的类,而不是我认为声明bean本身的类。