Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Spring@Configuration类自动关联字符串?_Java_Spring - Fatal编程技术网

Java 从Spring@Configuration类自动关联字符串?

Java 从Spring@Configuration类自动关联字符串?,java,spring,Java,Spring,我希望集中访问我所有的属性值,这样我就可以确保所有属性都使用相同的名称、相同的默认值等。我创建了一个类来集中所有这些属性,但我不确定需要访问这些值的类应该如何获得它们,因为不能自动连接字符串 我的班级是这样的: @Configuration public class SpringConfig { @Autowired @Value("${identifier:asdf1234}") public String identifier; } 我可以在多个类中使用它 publ

我希望集中访问我所有的属性值,这样我就可以确保所有属性都使用相同的名称、相同的默认值等。我创建了一个类来集中所有这些属性,但我不确定需要访问这些值的类应该如何获得它们,因为不能自动连接字符串

我的班级是这样的:

@Configuration
public class SpringConfig {
    @Autowired
    @Value("${identifier:asdf1234}")
    public String identifier;
}
我可以在多个类中使用它

public class Foo {
    @Autowired 
    private String theIdentifier;
}

public class Bar {
    @Autowired 
    private String anIdentifier;
}

在我看来,这个问题没有干净的解决办法。我能想到的最简单的方法是使用一个包含属性占位符的
静态
常量
字符串
字段

public final class Constants {
    private Constants() {}
    public static final String PROPERTY_NAME= "${identifier.12345}";
}
并让所有的
@Value
注释都使用它

public class Foo {
    @Value(Constants.PROPERTY_NAME)
    private String theIdentifier;
}

public class Bar {
    @Value(Constants.PROPERTY_NAME)
    private String anIdentifier;
}

现在,如果需要更改属性名称,只需在
常量中更改它即可但请确保重新编译所有内容。

另一种解决方案是使用所有配置创建一个Springbean并自动连接它:

@Component
public class MyConfig {
    @Value("${identifier:asdf1234}")
    public String identifier;

    public String getIdentifier() {
        return identifier;
    }
}
在你的其他课程中:

public class Foo {
    @Autowired
    private MyConfig myConfig;

    public void someMethod() {
        doSomething(myConfig.getIdentifier());
    }
}

基于以下属性初始化了字符串bean:

@Configuration
public class SpringConfig {

    @Bean
    public String identifier(@Value("${identifier:asdf1234}") identifier) {
       return identifier;
    }
}
然后在
@Value
注释中使用beanName表达式
“#{beanName}
按bean名称注入它

@Component
public class Foo {
    @Value("#{identifier}")
    private String oneIdentifier;
}

public class Bar {
   @Value("#{identifier}")
   private String sameIdentifier;
}

你是说你想在多个bean中注入一个属性值,因此希望所有的
@value
值都指向同一个属性名吗?是的。我用一个例子更新了它,试图更好地解释它。这暴露了属性名。这个答案应该更高