将@Service/@Component与@Bean放在一起不好吗?



假设我有这个服务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;
}

最新更新