Java 如何为spring中组件扫描自动创建的bean设置Init方法

Java 如何为spring中组件扫描自动创建的bean设置Init方法,java,eclipse,spring,spring-mvc,postconstruct,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 P

在显式定义的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是由spring通过组件扫描自动创建的,那么如何实现呢

我已经了解到,为了使用组件扫描创建的bean实现相同的效果,init方法应该用@PostConstruct注释。然而,@PostConstruct不是Spring的一部分,当我使用这个注释时,我有一个错误

“后构造无法解析为类型”

不知何故,Eclipse似乎不知道如何自动导入此注释。经过一番浏览,我发现使用

import javax.annotation.PostConstruct;
有效,但警告如下:

访问限制:“PostConstruct”类型不是API(对所需库“C:\Program Files\Java\jre1.8.0\U 45\lib\rt.jar”的限制)

所以我有两个问题:

  • Spring是否有在组件扫描bean上声明init和destroy方法的内置机制

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


  • 提前谢谢

    您可以实现
    初始化bean
    接口。它声明了
    afterPropertiesSet
    方法,该方法应该完全满足您的要求

    J2EE-Spring等价物

    @PostConstruct
    -
    初始化bean

    @PreDestroy
    -
    DisposableBean

    编辑: 一开始有点误解了这个问题。为
    Person
    创建一个接口,该接口扩展了
    InitializingBean
    DisposableBean
    ,实现了声明的
    AfterPropertieSet()
    /
    destroy()
    方法并将
    @Bean
    带注释方法的返回类型更改为接口应该可以做到这一点。

    您需要在spring配置中包括,其中一个答案清楚地说明了如何在spring中使用注释