使用spring初始化java枚举中的字段

使用spring初始化java枚举中的字段,java,spring,enums,Java,Spring,Enums,我需要通过spring初始化java枚举中的“flag”字段: public enum EntitySequenceType { TypeOne(-1), TypeTwo(-1000); private boolean flag; EntitySequenceType(long firstId){ System.out.println("enum's constructor: "+this.name()+" firstId="+firstId);

我需要通过spring初始化java枚举中的“flag”字段:

public enum EntitySequenceType {
    TypeOne(-1),
    TypeTwo(-1000);
    private boolean flag;

    EntitySequenceType(long firstId){
        System.out.println("enum's constructor: "+this.name()+" firstId="+firstId);
    }

    public void setFlag(boolean val) {
        this.flag = val;
    }

    public boolean getFlag() {
        return this.flag;
    }
}
spring配置为:

<bean id="myEnum" class="com.maven.start.maven_spring.EntitySequenceType"
        factory-method="valueOf">
    <property name="flag" value="true"/>
    <constructor-arg>
        <value>TypeOne</value>
    </constructor-arg>
</bean>

打字机
但是我遇到了一些问题,所以我有以下问题:

1.似乎我只能在config xml中的
标记中写入一个值,我不明白为什么会这样

2.当我调试代码时,我发现当spring初始化bean时,尽管我在配置xml中只写了一个
constructor arg
值,但构造函数被调用了两次。这是怎么发生的

3.在EntitySequenceType的构造函数中,我发现“flag”的值为null,为什么?如果枚举实现InitializingBean,则可以调用“afterPropertiesSet()”,但不是每次构造枚举类型时都调用它,因此在spring设置字段后是否有任何方法可以调用,但每次调用枚举类型时都会调用

谢谢你的回答

问题是:

枚举类型的构造函数必须是包私有私有访问。它会自动创建在枚举体开头定义的常量。您不能自己调用枚举构造函数

似乎我只能在表中写一个值 标记,我不明白为什么会这样

工厂方法
一起使用时,
构造函数arg
值引用该
工厂方法
的参数列表
EntitySequenceType.valueOf(String)
只接受一个参数,即
String

调试代码时,我发现当spring初始化时 bean,尽管我只在 配置xml时,构造函数会被调用两次。怎么会发生这种情况

枚举类型与任何其他类型一样,在代码中首次引用它们时,会加载并初始化它们的
.class
文件。
enum
常量

TypeOne(-1),
TypeTwo(-1000);
实际上是编译字节码中的
静态
字段。因此,它们在初始化类时被初始化。这是两个构造函数调用,这就是您看到的

构造函数arg
值与这些构造函数无关,它与您的
工厂方法有关

在EntitySequenceType的构造函数中,我发现“标志”是 值为空,为什么?在以下情况下可以调用“AfterPropertieSet()” 枚举实现InitializingBean,但不是每次都调用它 构造了枚举类型,那么之后是否有要调用的方法 该字段由spring设置,但每次调用枚举类型时都会调用该字段 打电话

它不能是
null
,它是一个基本类型。将在调用并执行
工厂方法
后设置属性。无需实现
初始化bean



不要为此使用
enum
。枚举应该是常量。

枚举不是这样工作的:它们似乎没有试图调用构造函数本身。