如何使用Spring在枚举构造函数中注入参数?

时间:2013-08-09 15:16:23

标签: java spring enums

我有一个这样的枚举:

public enum SomeEnum {
    ONE (new MyClass()),
    TWO (new MyClass());

    private final MyClass instance;

    private SomeEnum(MyClass instance) {
        this.instance = instance;
    }
}

如何从Spring上下文中将MyClass实例传递给枚举构造函数?它甚至可能吗?

我需要它,因为我在创建它时将一些参数从config(.properties文件)传递到MyClass实例。现在我在使用bean的xml文件中进行,也许还有另一种方法吗?

3 个答案:

答案 0 :(得分:5)

你不能这样做。

在枚举类型的official Java tutorial中,它说明了

  

注意:枚举类型的构造函数必须是package-private或   私人访问。它会自动创建常量   在枚举体的开头定义。你不能调用枚举   构建者自己。

由于Enum应该是一组常量,因此能够创建新的常量是没有意义的,因此构造函数即使通过反射也不可用。

答案 1 :(得分:2)

即使我们在春天的背景下谈话,我认为这也是不可能的。

您无法实例化枚举,因为它们具有静态特性。所以我认为Spring IoC也不能创建枚举。

请查看Spring IoC章。

答案 2 :(得分:0)

然而,你可以做的是利用枚举中的MyClass来封装一些“常量”行为。你可以随意拿这个( 而不是它一定是一个好主意... )例如你可以使用一些静态工厂类来加载基于的属性值传入的常数名称。

public enum SomeEnum {
    ONE ("propname1"),
    TWO ("propname2");

    private final MyClass instance;

    private SomeEnum(String str) {
        this.instance = MyClassFactory.newInstance(str);
    }

    public Object doSomething(int value) {
        return instance.doSomething(value);
    }
}