当前位置: 首页 > 知识库问答 >
问题:

在基于枚举的单例中注入值

严承允
2023-03-14

我正在使用Spring 4.0.1,希望使用enum实现一个singleton。我的单例对象需要我在属性文件中定义的服务器名。如何将这个值注入到singleton对象中?

每个服务器名称将有一个单例对象。

请帮忙

共有1个答案

仲孙钊
2023-03-14

假设你有这样的东西

public enum ServerSingleton {
    INSTANCE;

    private String serverName;

    public String getServerName() {
        return serverName;
    }

    public void setServerName(String serverName) {
        this.serverName = serverName;
    }
}

您可以使用以下bean定义设置INSTANCE.serverName字段

<bean class="com.spring.Example$ServerSingleton" factory-method="valueOf">
    <constructor-arg value="INSTANCE" />
    <property name="serverName" value="${serverName}"></property>
</bean> 

或者,在Java@Configuration类中

@Value("${serverName}")
private String serverName;

@Bean
public ServerSingleton serverSingleton() {
    ServerSingleton instance = ServerSingleton.INSTANCE;
    instance.setServerName(serverName);
    return instance;
}

请注意,我不建议这样做。Spring已经提供了一种方法,可以有效地将单例与单例范围一起使用。

 类似资料:
  • 问题内容: 我们有一个枚举 此外,我们还有一个包含字符串的列表。有没有一种方法可以根据枚举定义的顺序(而不是自然顺序)对列表进行排序。 排序后的列表应为。 问题答案: 器具通过枚举(其中值声明的顺序)的自然顺序。如果仅通过解析创建枚举值(而不是字符串)的列表,则使用对该列表进行排序,它应该按照您想要的方式进行排序。如果您再次需要一个字符串列表,则可以通过调用每个元素来转换回来。

  • 问题内容: 我正在尝试使用Go枚举Windows注册表中的值列表,但遇到了一些麻烦。我尝试了两种方法:使用Go提供的库进行调用,以及使用lxn的Windows API包装器 。在两种情况下,我都遇到相同的问题。这是我正在使用的代码(当前正在使用来自lxn的win库): 在这种情况下,始终返回代码87,MSDN唯一的解释是“参数不正确”。 有没有人有任何想法可以为此指出正确的方向? 问题答案: Go

  • 枚举是一组命名的整型常量。枚举类型使用 enum 关键字声明。 C# 枚举是值的数据类型。换句话说,枚举包含它自己的值,不能继承或被继承。 声明枚举变量 用于声明枚举的一般语法: enum <enum_name> { enumeration list }; 这里 enum_name 指定枚举类型名称。 enumeration list 是一个逗号分隔的标识符的列表。 每个枚举列表中的符号表

  • 我有以下结构 包含枚举,该枚举包含或。现在我有了一个类,它包含一个。 这是在swagger yml中指定的(删除了一些不相关的代码) 我使用(也尝试了v3&openapi-generator)生成代码,配置如下: 现在发生的情况是,库将生成注释: 这里的问题是,如果我现在尝试反序列化/序列化包含带有的收件箱的Json字符串,它将引发异常,因为没有名称为的已知子类型。 seralizer期望注释指定

  • 问题内容: 枚举被认为是单例的最佳方式,其原因之一是它隐式继承。 但是,枚举如何防止单例的反序列化问题? 问题答案: 序列化机制以特殊的特定方式处理它们。但是,可以通过定义返回唯一实例的方法来对传统的单例进行反序列化。有关示例,请参见http://www.oodesign.com/singleton- pattern.html 。

  • 问题内容: 我想按字段为单个请求注入数据存储区,例如 当前,我已经对此实现了类似的方法: 带有属性的Jersey2.x自定义注入注释 ,如下所示: 在dropwizard应用程序的run方法中: 我读到,您必须将资源注册为单例,如下所示: 但是我必须将对象传递给构造函数,这对于单例是不可能的。 连同在注册为实例的资源中一起使用时效果很好,那么如何为我的用例实现这种行为? 问题答案: 因此,当您实例