如何让 @Scope("prototype") 的每个Bean实例都使用不同的属性文件进行初始化?
我有一个Spring Boot的 ProviderSimulator 类,它包含一个 @Scope("prototype"),且这个值就在里面:
@Service
@Scope("prototype")
public class ProviderSimulator {
@Value("${provider.description}")
private String providerDescription;
[...]
我正在从一个 application.properties 初始化它们的属性,代码如下:
@Autowired
private ApplicationContext ctx;
ProviderSimulator p1 = ctx.getBean(ProviderSimulator.class);
ProviderSimulator p2 = ctx.getBean(ProviderSimulator.class);
ProviderSimulator p3 = ctx.getBean(ProviderSimulator.class);
我有三个不同的Bean:p1、p2、p3。
但当然,它们各自的 providerDescription 中都包含来自 application.properties 的 provider.description 的值!
我是否有办法让每个Bean自己从不同的属性文件的值来初始化?
这样 p1 将从 p1.properties 读取,p2 将从 p2.properties 读取,等等?
解决方案
我认为这不是原型作用域的用例。
我认为你想定义同一类型的三个单例
@Configuration
public class MyConfiguration {
@Bean
public ProviderSimulator ps1(@Value("${provider.description1}") description) {
return new ProviderSimulator(description);
}
@Bean
public ProviderSimulator ps2(@Value("${provider.description2}") description) {
return new ProviderSimulator(description);
}
@Bean
public ProviderSimulator ps3(@Value("${provider.description3}") description) {
return new ProviderSimulator(description);
}
}
这将意味着你需要从 ProviderSimulator 类中移除 @Service 和 @Scope 注解
注意:现在在 ApplicationContext 中有3 个类型为 ProviderSimulator 的Bean,因此在注入时需要进行区分(例如 @Qualifier("ps1"))
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。