我可以在枚举上使用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

@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

}

完成此操作后,我观察到失败,原因是Spring无法初始化枚举类(这是可以理解的)。

我的问题是-

是否有其他方法可以将枚举类标记为bean?

还是我需要更改实施方式?

回答:

如果确实需要使用基于枚举的单例(尽管默认情况下Spring

bean是单例),则需要使用其他方法在Spring上下文中注册该bean。例如,您可以使用XML配置:

<util:constant static-field="...Person.INSTANCE"/>

或实施FactoryBean

@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;

}

}

以上是 我可以在枚举上使用Spring的@Component吗? 的全部内容, 来源链接: utcz.com/qa/427281.html

回到顶部