我可以在枚举上播放春天的@Component吗?



我使用Spring 3.0。X和我的一个实现遵循enum单例模式。

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来管理依赖注入,则不需要使用enum单例模式。您可以将Person更改为普通类。Spring将使用默认的singleton作用域,因此所有Spring注入的对象将获得相同的实例。

相关内容

  • 没有找到相关文章

最新更新