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本身的类。