gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:57:30 25 4
gpt4 key购买 nike

在显式定义的 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的一部分,当我使用这个注释时,出现错误

“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”不是 API(对所需库“C:\Program Files\Java\jre1.8.0_45\lib\rt.jar”的限制)当使用@PostConstruct时?

提前致谢!

最佳答案

您可以实现InitializingBean接口(interface)。它声明了 afterPropertiesSet 方法,该方法应该完全符合您的要求。

Spring Javadoc InitializingBean

J2EE - Spring 等效项

@PostConstruct - InitializingBean

@PreDestroy - DisposableBean

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

关于java - spring中组件扫描自动创建的bean如何设置Init方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37072312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com