Spring - 将 @Bean 添加到没有名称属性的字符串
Spring - Adding @Bean to String without name attribute
有个用于在String上添加@Bean
You will have to name the bean, and then use the @Qualifier annotation when autowiring referencing that name.
但是在下面的代码中,没有使用name属性
@Configuration
@PropertySource(value = { "classpath:my.properties" })
public class MyEnvironment {
@Value("${MY_NAME}") String MY_NAME;
@Value("${MY_NAME2}") String MY_NAME2;
@Bean
public String getMyName() {
return MY_NAME;
}
@Bean
public String getMyName2() {
return MY_NAME2;
}
}
调用方法如下:
myEnvironment.getMyName();
这种情况下不就是@Bean
redundant/irrelevant吗?这个公约也会引起问题吗?或者有什么隐藏的好处?
考虑到Spring的意图是注入依赖,@Bean
在这种情况下肯定是多余的。
由于您的大多数 classes 仅使用(或者您可以说 - 取决于)配置对象 myEnvironment
。因此,将 MyEnvironment
class 作为一个单元注入那些依赖它的 class 对象而不是单个 String
对象更有意义。
不过,这取决于您如何设计 classes 及其依赖项。例如。您也可以直接将这两个字符串值注入到需要它的 classes 中,方法是直接在那些 classes 上使用 @Value
而无需 MyEnvironment
class 完全没有。
有
You will have to name the bean, and then use the @Qualifier annotation when autowiring referencing that name.
但是在下面的代码中,没有使用name属性
@Configuration
@PropertySource(value = { "classpath:my.properties" })
public class MyEnvironment {
@Value("${MY_NAME}") String MY_NAME;
@Value("${MY_NAME2}") String MY_NAME2;
@Bean
public String getMyName() {
return MY_NAME;
}
@Bean
public String getMyName2() {
return MY_NAME2;
}
}
调用方法如下:
myEnvironment.getMyName();
这种情况下不就是@Bean
redundant/irrelevant吗?这个公约也会引起问题吗?或者有什么隐藏的好处?
考虑到Spring的意图是注入依赖,@Bean
在这种情况下肯定是多余的。
由于您的大多数 classes 仅使用(或者您可以说 - 取决于)配置对象 myEnvironment
。因此,将 MyEnvironment
class 作为一个单元注入那些依赖它的 class 对象而不是单个 String
对象更有意义。
不过,这取决于您如何设计 classes 及其依赖项。例如。您也可以直接将这两个字符串值注入到需要它的 classes 中,方法是直接在那些 classes 上使用 @Value
而无需 MyEnvironment
class 完全没有。