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();

这种情况下不就是@Beanredundant/irrelevant吗?这个公约也会引起问题吗?或者有什么隐藏的好处?

考虑到Spring的意图是注入依赖,@Bean在这种情况下肯定是多余的。

由于您的大多数 classes 仅使用(或者您可以说 - 取决于)配置对象 myEnvironment。因此,将 MyEnvironment class 作为一个单元注入那些依赖它的 class 对象而不是单个 String 对象更有意义。

不过,这取决于您如何设计 classes 及其依赖项。例如。您也可以直接将这两个字符串值注入到需要它的 classes 中,方法是直接在那些 classes 上使用 @Value 而无需 MyEnvironment class 完全没有。