枚举是否可以为不同的值返回不同的spring bean?
如果可能,我们可以创建一个包含不同值的枚举,并且我们可以为不同的值返回不同类型的spring组件。
我想实现这样的目标:
public enum MyFactory {
BEAN1 {
@Autowired
Bean1 bean1;
@Override
public MyBean getMyBean() {
return bean1;
}
},
BEAN2 {
@Autowired
Bean1 bean2;
@Override
public MyBean getMyBean() {
return bean2;
}
};
public abstract MyBean getMyBean();
}
谢谢,
答案 0 :(得分:0)
Java枚举被设计为常量值
但要实现您的要求,您应该在创建后设置枚举状态,或者将ApplicationContext
作为参数传递给枚举方法或枚举方法初始化。
它击败了枚举目的:恒定值。
我认为定义一个bean类更有意义,它提供一次定义的bean而无法改变它们。
@Component
public class MyEnumClass{
@Autowired
private Value valueA;
@Autowired
private Value valueB;
public Value getValueA(){
return valueA;
}
public Value getValueB(){
return valueB;
}
...
}
Value
类优选不可变。
答案 1 :(得分:0)
这与依赖注入的整体好处有些相反;只要您的组件在它们之间定义公共接口,您就可以随意注入任何一个,而无需(自我管理)条件。
假设您有组件AComponent
和BComponent
。它们是相关的,并且共享一个足够通用的接口,将它编码为接口是有意义的。然后,您可以定义它。
public interface Component {
Integer generateValue(String foo, List<Integer> bar);
}
public class AComponent implements Component {}
public class BComponent implements Component {}
然后,您可以随意注入:
private Component component;
@Autowired
public MyService(@Qualifier("bComponent") Component component) {
this.component = component;
}
Spring完全有能力为您管理动态布线。
或者,如果这些组件完全 un 彼此相关,那么您无论如何都必须单独连接它们,而不是根据您的需要动态选择它们。