假设我有这个服务bean:
@Service
public class MyService{
private final HashMap<String,String> values;
...
}
其值为:
com.foo:
values:
a: world
b: helo
我可能想在配置中创建它:
@Configuration
@ConfigurationProperties(prefix="com.foo")
public class MyConf{
private Map<String, String> values;
@Bean
public MyService myService(){
return new MyService(values);
}
}
但我担心春天会做一些奇怪的事情,比如创造 2 颗豆子或不知道什么......这是一个好的做法,还是我应该@ConfigurationProperties移动到@Service本身?
您可以将配置直接注入到服务中
@Service
public class MyService{
private final MyConf conf;
public MyService(MyConf conf) {
this.conf = conf;
}
}
并使用myservice方法从MyConf中删除@Bean注释。
你不应该这样做,因为它会创建两个相同类型的 bean。
在您的情况下,您没有提到豆子的不同名称 因此,如果否则它将覆盖spring.main.allow-bean-definition-overriding=true
它将失败。
PS:要@Service
注释来创建 bean,应在@ComponentScan
或基本扫描包中配置类包
如果你想在你的服务类(或其他任何地方(中使用你的属性值,你应该注入它:
@Service
public class MyService{
@Autowired
private MyConf myConf;
}