我可以在@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);
}
}
这种方法会遇到什么麻烦吗?
答案 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
时才会这样做。