当前位置: 首页 > 面试题库 >

我可以在枚举上使用Spring的@Component吗?

轩辕成天
2023-03-14
问题内容

我正在使用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;
    }
}


 类似资料:
  • 问题内容: 我正在重新编写一些代码,并且已经确定了重新创建类的方式,因为存在固定数量的工作表,所以我将它们创建为枚举。这是基于构建器模式与伸缩构建器的可读性来做出的决定。 我获取的代码抓取了一些.xls文件,添加了标头(并从其他.xls文件中读取了一些标头),甚至还有一些子表。然后,它以特定方式将各种工作表合并在一起,以在主要excel工作簿上制作选项卡。我的问题是某些工作簿选项卡采用不同数量的工

  • 我正在尝试使用spring injection注入到枚举中。像这样: 我的Carparts bean在configuration类中定义如下: 但不管我得到的是车体注射的空值。任何帮助都将不胜感激。

  • 问题内容: 是否可以在Java枚举中使用,还是需要使用?在我的测试中,它始终有效,但是我不确定是否可以保证。特别是,在枚举上没有方法,因此我不知道是否有可能获得一个枚举,该枚举将返回不同于的值。 例如,这样可以吗: 还是我需要这样写: 问题答案: 仅需2美分:这是Sun发布的Enum.java的代码,并且是JDK的一部分:

  • 问题内容: 4年前关闭。 刚刚下载了Xcode 7 Beta,并列举了此错误 错误: 枚举不可用在序列上调用枚举方法 问题答案: 在Swift 2中,它不再是全局函数,而是的扩展。 直接在序列上调用它以进行枚举,如下所示:

  • 问题内容: 我正在阅读Swift浏览文档,并且遇到了问题。这是代码: 该功能将无法正常工作,我想知道是否有一种方法可以更改枚举的关联值,以及如何更改? 问题答案: 最直接的问题是,当您应该使用声明不可变变量(用声明)时,您尝试更改其值。但是,由于您的变量包含关联值的副本,因此,这不会解决此特定问题,但是通常这是您需要注意的。 如果要解决此问题,则需要将该函数声明为muting函数,并根据具体情况将

  • 问题内容: 以下是有效的枚举声明。 但是我可以用枚举类型覆盖抽象类吗? SomeEnumClass.java OverrideingEnumClass.java 如果没有,为什么不呢?有什么好的选择? 问题答案: 不,你不能;枚举类型全部扩展,并且是隐式的。枚举可以实现接口,也可以直接在有关的枚举类上声明相关方法。 (我确实看到了您想要的基本概念,它是一个mixin;也许Java 8接口在这方面会