Java 我可以要春天吗;枚举上的s@组件?
我正在使用Spring3.0.x,并在我的一个实现中遵循enum单例模式Java 我可以要春天吗;枚举上的s@组件?,java,spring,enums,Java,Spring,Enums,我正在使用Spring3.0.x,并在我的一个实现中遵循enum单例模式 public enum Person implements Nameable { INSTANCE; public String getName(){ // return name somehow (Having a variable but omitted for brevity) } } 最近我们开始通过Spring收集这些类型,所以我需要将@Component添加到我的类中
public enum Person implements Nameable {
INSTANCE;
public String getName(){
// return name somehow (Having a variable but omitted for brevity)
}
}
最近我们开始通过Spring收集这些类型,所以我需要将@Component添加到我的类中
@Component
public enum Person implements Nameable {
INSTANCE;
public String getName(){
// return name somehow (Having a variable but omitted for brevity)
}
}
收集方法是
@Autowired
public void collectNameables(List<Nameable> all){
// do something
}
@Autowired
公共无效收藏品(列出全部){
//做点什么
}
执行此操作后,我观察到失败,原因是Spring无法初始化枚举类(这是可以理解的)。我的问题是-
有没有其他方法可以将枚举类标记为bean
或者我需要更改我的实现?如果使用Spring管理依赖项注入,则不需要使用enum单例模式。你可以把你的人换成普通班。Spring将使用默认的singleton作用域,因此所有Spring注入的对象都将获得相同的实例。如果确实需要使用基于枚举的singleton(尽管Spring bean默认为singleton),则需要使用其他方法在Spring上下文中注册该bean。例如,您可以使用XML配置:
<util:constant static-field="...Person.INSTANCE"/>
如果您使用enum来实现一个单例,那么为什么您需要注入它呢?如果只有一个实例,为什么要将它作为列表注入呢?不仅有一个实例,还有很多实例,它们跨模块,其他人以前都是作为单例实现的,但一些开发人员选择作为enum单例模式实现(像我一样)但现在它开始失败,因为需要收集Person的所有实例。
@Component
public class PersonFactory implements FactoryBean<Person> {
public Person getObject() throws Exception {
return Person.INSTANCE;
}
public Class<?> getObjectType() {
return Person.class;
}
public boolean isSingleton() {
return true;
}
}