我可以在枚举上使用Spring的@Component吗?
我正在使用Spring 3.0.x,并按照枚举单例模式进行实现。
public enum Person implements Nameable { INSTANCE;
public String getName(){
// return name somehow (Having a variable but omitted for brevity)
}
}
最近,我们开始通过Spring收集这些类型,因此我需要在类中添加@Component。
@Componentpublic enum Person implements Nameable {
INSTANCE;
public String getName(){
// return name somehow (Having a variable but omitted for brevity)
}
}
收集方法是
@Autowiredpublic void collectNameables(List<Nameable> all){
// do something
}
完成此操作后,我观察到失败,原因是Spring无法初始化枚举类(这是可以理解的)。
我的问题是-
是否有其他方法可以将枚举类标记为bean?
还是我需要更改实施方式?
回答:
如果确实需要使用基于枚举的单例(尽管默认情况下Spring
bean是单例),则需要使用其他方法在Spring上下文中注册该bean。例如,您可以使用XML配置:
<util:constant static-field="...Person.INSTANCE"/>
或实施FactoryBean
:
@Componentpublic class PersonFactory implements FactoryBean<Person> {
public Person getObject() throws Exception {
return Person.INSTANCE;
}
public Class<?> getObjectType() {
return Person.class;
}
public boolean isSingleton() {
return true;
}
}
以上是 我可以在枚举上使用Spring的@Component吗? 的全部内容, 来源链接: utcz.com/qa/427281.html