加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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无法初始化枚举类(这是可以理解的).
我的问题是 –
有什么其他的方式可以将我的枚举类标记为一个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;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读