使用spring初始化java枚举中的字段
我需要通过spring初始化java枚举中的“flag”字段:使用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);
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
。枚举应该是常量。枚举不是这样工作的:它们似乎没有试图调用构造函数本身。