Java 使用Spring工厂创建的枚举bean,但从未调用@PostConstruct
我有一个枚举:Java 使用Spring工厂创建的枚举bean,但从未调用@PostConstruct,java,spring,enums,singleton,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
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!");
}
}
还有一个弹簧厂
@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;
}
}
@组件
公共类MyEnumFactory实现FactoryBean{
@凌驾
公共MyEnum getObject()引发异常{
返回MyEnum.INSTANCE;
}
@凌驾
公共类getObjectType(){
返回MyEnum.class;
}
@凌驾
公共布尔isSingleton(){
返回true;
}
}
问题是:
在调用工厂的方法给我唯一的实例时,
从未调用init()方法!
您会注意到,由于它是一个枚举,该类没有@Component
注释。这就是我使用工厂的原因
我想要的是启动一个post构造,它的方式无关紧要。您不能将enum用作bean(通常您不必这样做),因此您既不能在其上使用
@PostConstruct
,也不能自动关联其中的任何内容:您的依赖项重新组合
将是null
您不能将enum用作bean(通常您不必这样做),因此您既不能在其上使用@PostConstruct
,也不能自动关联其中的任何内容:您的依赖项重新组合
将为null
检查此项。在依赖项注入完成后需要执行的方法上使用构造后注释来执行任何初始化,但在您的情况下,您使用的是ENUM(MyEnum)这无法实例化。因此PostConstruct在@electrodecheck时不起作用检查此PostConstruct注释用于需要在依赖项注入完成后执行的方法以执行任何初始化,但在您的情况下,您使用的是ENUM(MyEnum),这无法实例化。因此PostConstruct在@Electro(1)时不起作用我不太明白,但我想了解更多:-)。事实上,我想通过ENUM方法使用模式单例,这是最佳实践,据许多确定的开发人员称。是不是正确?(2)其次,要实例化我的类型重组(我的依赖重组重组;),我必须通过applicationContext.getBean方法执行吗?是否正确?@electro(1)Springbean已经(默认情况下)是单例,如果这就是您使用枚举的原因,那么您绝对不需要它们。(2) 取决于你想做什么。我建议你学习一点关于春天的知识,然后带着更好的问题回来。事实上,我并没有真正理解春天的概念。这更清楚。如果你有更好的关于作用域和它们之间冲突的文档,那就太好了。@electro我之前给你的链接有一个关于作用域的部分。如果您想了解更多详细信息,可以查看(唯一感兴趣的范围是singleton,其他范围仅与SprigMVC相关)。你所说的“他们之间的冲突”是什么意思?Bean范围没有冲突。(1)我不太理解,但我想了解更多:-)。事实上,我想通过ENUM方法使用模式单例,这是最佳实践,据许多确定的开发人员称。是不是正确?(2)其次,要实例化我的类型重组(我的依赖重组重组;),我必须通过applicationContext.getBean方法执行吗?是否正确?@electro(1)Springbean已经(默认情况下)是单例,如果这就是您使用枚举的原因,那么您绝对不需要它们。(2) 取决于你想做什么。我建议你学习一点关于春天的知识,然后带着更好的问题回来。事实上,我并没有真正理解春天的概念。这更清楚。如果你有更好的关于作用域和它们之间冲突的文档,那就太好了。@electro我之前给你的链接有一个关于作用域的部分。如果您想了解更多详细信息,可以查看(唯一感兴趣的范围是singleton,其他范围仅与SprigMVC相关)。你所说的“他们之间的冲突”是什么意思?Bean作用域没有冲突。