如何为Spring中的Component Scanning自动创建的bean设置Init方法

时间:2016-05-06 12:20:55

标签: java eclipse spring spring-mvc postconstruct

在明确定义的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')

所以我有两个问题:

  1. Spring是否有内置机制来声明组件扫描bean的init和destroy方法?

  2. 为什么会出现错误:访问限制:类型' PostConstruct'使用@PostConstruct时不是API(对所需库的限制&C:\ Program Files \ Java \ jre1.8.0_45 \ lib \ rt.jar')

  3. 提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以实施InitializingBean界面。它声明了afterPropertiesSet方法,它应该完全符合您的要求。

{{3}}

J2EE - Spring等价物

@PostConstruct - InitializingBean

@PreDestroy - DisposableBean

修改 有点误解了这个问题。为Person创建扩展InitializingBeanDisposableBean的接口,实现声明的afterPropertiesSet() / destroy()方法并更改@Bean的返回类型接口的注释方法应该可以解决问题。