spring如何为组件扫描自动创建的bean设置Init方法
How to set Init method for beans automatically created by Component Scanning in spring
在显式定义的 beans 中,可以通过注释定义 init 和 destroy 方法,在 Spring 配置 class:
@Configuration
@ComponentScan
public class Appconfig {
@Bean(name="Andre",initMethod="init",destroyMethod="destroy")
@Scope("singleton")
public Person person() {
Person person = new Person(1,"Andre");
person.setTaxId(5);
return person;
}
但是,如果bean是spring通过组件扫描自动创建的,怎么办?
我已经读到要用通过组件扫描创建的 bean 实现相同的效果,init 方法应该用@PostConstruct 注释。但是,@PostConstruct 不是 Spring 的一部分,当我使用这个注解时,出现错误
"PostConstruct cannot be resolved to a type"。
不知道为什么,Eclipse 好像不知道如何自动导入这个注解。经过更多浏览后,我发现使用
import javax.annotation.PostConstruct;
有效,但有警告说:
访问限制:类型'PostConstruct'不是API(对所需库的限制'C:\Program Files\Java\jre1.8.0_45\lib\rt.jar')
所以我有两个问题:
Spring是否有内置机制来声明组件扫描 bean 上的 init 和 destroy 方法?
为什么会出现错误:访问限制:使用@PostConstruct 时,类型'PostConstruct' 不是API(对必需库'C:\Program Files\Java\jre1.8.0_45\lib\rt.jar' 的限制)?
提前致谢!
您可以实现InitializingBean
接口。它声明了 afterPropertiesSet
方法,该方法应该完全按照您的要求执行。
Spring Javadoc InitializingBean
J2EE - Spring 等价物
@PostConstruct
- InitializingBean
@PreDestroy
- DisposableBean
编辑:
起初有点误解了这个问题。为 Person
创建一个扩展 InitializingBean
或 DisposableBean
的接口,实现已声明的 afterPropertiesSet()
/destroy()
方法并更改 return 类型的 @Bean
接口的注释方法应该可以解决问题。
在显式定义的 beans 中,可以通过注释定义 init 和 destroy 方法,在 Spring 配置 class:
@Configuration
@ComponentScan
public class Appconfig {
@Bean(name="Andre",initMethod="init",destroyMethod="destroy")
@Scope("singleton")
public Person person() {
Person person = new Person(1,"Andre");
person.setTaxId(5);
return person;
}
但是,如果bean是spring通过组件扫描自动创建的,怎么办?
我已经读到要用通过组件扫描创建的 bean 实现相同的效果,init 方法应该用@PostConstruct 注释。但是,@PostConstruct 不是 Spring 的一部分,当我使用这个注解时,出现错误
"PostConstruct cannot be resolved to a type"。
不知道为什么,Eclipse 好像不知道如何自动导入这个注解。经过更多浏览后,我发现使用
import javax.annotation.PostConstruct;
有效,但有警告说:
访问限制:类型'PostConstruct'不是API(对所需库的限制'C:\Program Files\Java\jre1.8.0_45\lib\rt.jar')
所以我有两个问题:
Spring是否有内置机制来声明组件扫描 bean 上的 init 和 destroy 方法?
为什么会出现错误:访问限制:使用@PostConstruct 时,类型'PostConstruct' 不是API(对必需库'C:\Program Files\Java\jre1.8.0_45\lib\rt.jar' 的限制)?
提前致谢!
您可以实现InitializingBean
接口。它声明了 afterPropertiesSet
方法,该方法应该完全按照您的要求执行。
Spring Javadoc InitializingBean
J2EE - Spring 等价物
@PostConstruct
- InitializingBean
@PreDestroy
- DisposableBean
编辑:
起初有点误解了这个问题。为 Person
创建一个扩展 InitializingBean
或 DisposableBean
的接口,实现已声明的 afterPropertiesSet()
/destroy()
方法并更改 return 类型的 @Bean
接口的注释方法应该可以解决问题。