在明确定义的bean中,可以在Spring配置类上通过注释定义init和destroy方法:
@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是通过组件扫描自动创建的,那该怎么办?
我已经了解了使用组件扫描创建的bean实现相同的效果,init方法应该使用@PostConstruct进行注释。但是,@ PostConstruct不是Spring的一部分,当我使用这个注释时,我有错误
" PostConstruct无法解析为类型"。
不知何故,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')
提前致谢!
答案 0 :(得分:1)
您可以实施InitializingBean
界面。它声明了afterPropertiesSet
方法,它应该完全符合您的要求。
{{3}}
J2EE - Spring等价物
@PostConstruct
- InitializingBean
@PreDestroy
- DisposableBean
修改强>
有点误解了这个问题。为Person
创建扩展InitializingBean
或DisposableBean
的接口,实现声明的afterPropertiesSet()
/ destroy()
方法并更改@Bean
的返回类型接口的注释方法应该可以解决问题。