Java 将依赖项值注入枚举
我有以下枚举:Java 将依赖项值注入枚举,java,dependency-injection,enums,spring-boot,Java,Dependency Injection,Enums,Spring Boot,我有以下枚举: public class Wrapper(){ public enum MyEnum{ A("a_id", "a_source", "a_target"), B("b_id", "b_source", "b_target"), ... Z("z_id", "z_source", "z_target"), String id; String source; St
public class Wrapper(){
public enum MyEnum{
A("a_id", "a_source", "a_target"),
B("b_id", "b_source", "b_target"),
...
Z("z_id", "z_source", "z_target"),
String id;
String source;
String target;
myEnum(String i, String s, String t){
id = i;
source = s;
target = t;
}
}
}
如果可能,我希望能够在application.properties
中指定枚举参数(例如“a_id”
),以便根据需要修改和插入它们。我最初的想法是:
public class Wrapper(){
@Value("${a.id}")
private String A_ID;
@Value("${a.source}")
private String A_SOURCE;
@Value("${a.target}")
private String A_TARGET;
public enum MyEnum{
A(A_ID, A_SOURCE, A_TARGET),
...
}
}
使用application.properties
看起来像:
a.id=a_id
a.source=a_source
a.target=a_target
问题是我不能在枚举内调用A_ID
而不使其成为static
,但是如果我使其成为static
,我就不能执行依赖项注入(据我所知)
让这些字符串进行外部配置和注入的最佳方法是什么?可能这家伙有答案: 正如dnault所说,尝试从
应用程序.properties
获取配置值在Spring中是不可能的-您需要保证Spring已经加载并解析了配置,然后尝试将其注入到静态对象中
但是,正如我链接的SO帖子所提到的,您需要为此使用Springs配置加载吗?我认为有人提到了另一种选择:
public enum MyEnum {
A;
public final String id;
public final String source;
public final String target;
MyEnum() {
this.id = BUNDLE.getString("A.id");
this.source = BUNDLE.getString("A.source");
this.target = BUNDLE.getString("A.target");
}
private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(...);
}
你不能这么做。但你可以:
public enum MyEnum {
A, B, C, .... Z;
String idKey() { return name().toLowerCase() + ".id"; }
String sourceKey() { return name().toLowerCase() + ".source"; }
String targetKey() { return name().toLowerCase() + ".target"; }
};
然后,您可以按照定义创建属性文件,然后在客户机代码中的某个位置创建:
MyEnum e = ...
properties.getProperty(e.idKey());