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

时间:2014-02-26 05:21:11

标签: java spring singleton

我正在使用Spring 4.0.1并希望使用枚举实现单例。我的单例对象需要我在属性文件中定义的服务器名称。如何将此值注入单个对象?

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

请帮忙

1 个答案:

答案 0 :(得分:1)

假设你有类似的东西

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已经提供了一种有效地使用单例范围的单例的方法。