java – 我可以在枚举上使用Spring的@Component吗?
发布时间:2020-12-14 16:17:36 所属栏目:Java 来源:网络整理
导读:我使用 Spring 3.0.x并遵循我的一个实现的枚举单例模式. public enum Person implements Nameable { INSTANCE; public String getName(){ // return name somehow (Having a variable but omitted for brevity) }} 最近我们开始通过Spring收集这些类型,所以
我使用
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无法初始化枚举类(这是可以理解的). 解决方法
如果你真的需要使用基于枚举的单例(尽管事实上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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |