我有一个枚举:
public enum MyEnum {
INSTANCE;
@Autowired
Regroupements regroupements;
@PostConstruct
public void initi()
{
System.out.println("---------- i am not called!");
}
private MyEnum() {
System.out.println("---------- i am called!");
}
}
还有一个 Spring 工厂
@Component
public class MyEnumFactory implements FactoryBean<MyEnum>{
@Override
public MyEnum getObject() throws Exception {
return MyEnum.INSTANCE;
}
@Override
public Class<?> getObjectType() {
return MyEnum.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
问题是: 当调用工厂的方法来给我唯一的实例时, init() 方法从未被调用! 你会注意到,因为它是一个枚举,所以该类没有 @Component 注解。这就是我使用工厂的原因。
我想要的是启动一个后构造,方式并不重要。
最佳答案
你不能使用 enum 作为 bean(通常你也不必这样做),因此你既不能在其上使用 @PostConstruct
,也不能 Autowiring 内部的任何内容:你的依赖项 Regroupements regroupements;
将是 null
。
关于java - 使用 Spring-Factory 创建 ENUM bean,但从未调用 @PostConstruct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45456241/