java - 使用 Spring-Factory 创建 ENUM bean,但从未调用 @PostConstruct

标签 java spring enums singleton

我有一个枚举:

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/

相关文章:

java - hibernate 中一对一关联的延迟加载问题

java - 根据枚举参数选择 Spring bean

java - Spring 模型对象

swift - 如何将枚举大小写传递到使用 'if case' 检查属性大小写的函数中

c# - C# 中的枚举子集或子组

java - javadoc 中的枚举排序

java - 让 Action 更加流畅

java - 有趣的循环和 boolean 值

在 Visio 中使用的 Spring Integration Images

java - 在映射中查找枚举值以初始化列表