Spring-使用静态final字段(常量)进行bean初始化


81

是否可以使用CoreProtocolPNames类的static final字段来定义bean,如下所示:


<bean id="httpParamBean" class="org.apache.http.params.HttpProtocolParamBean">
     <constructor-arg ref="httpParams"/>
     <property name="httpElementCharset" value="CoreProtocolPNames.HTTP_ELEMENT_CHARSET" />
     <property name="version" value="CoreProtocolPNames.PROTOCOL_VERSION">
</bean>

public interface CoreProtocolPNames {

    public static final String PROTOCOL_VERSION = "http.protocol.version"; 

    public static final String HTTP_ELEMENT_CHARSET = "http.protocol.element-charset"; 
}

如果可能的话,最好的方法是什么?


删除问题或将其保留不变,但不要介于两者之间。谢谢。
Pascal Thivent 2010年

Answers:


113

像这样(春季2.5)

<bean id="foo" class="Bar">
    <property name="myValue">
        <util:constant static-field="java.lang.Integer.MAX_VALUE"/>
    </property>
</bean>

util命名空间来自哪里xmlns:util="http://www.springframework.org/schema/util"

但是对于Spring 3,使用@Value注释和表达语言会更干净。看起来像这样:

public class Bar {
    @Value("T(java.lang.Integer).MAX_VALUE")
    private Integer myValue;
}


1
使用Spring EL进行XML配置,可以正常工作:#{T(com.foo.Headers).HEADER_STATUS}按照jonstefansson.blogspot.com/2011/02/…– 8bitme
2014年

1
当Annotation声明bean时,如何将字段标记为private和final?
Gunjan Shah

你能解释一下什么是T(Type)做在你的@Value注释?我不熟悉该表示法。我一直在用@Value("${my.jvm.arg.name}")
布雷克(Blake)

我仍在努力使用“更清洁”注释的好处-@Value的问题是,您必须重新发布代码以更改配置-使用XML的情况下,您可以分别重新发布配置,或使用不同的配置,取决于环境。
Ed Randall

26

或者,或者,直接在XML中使用Spring EL:

<bean id="foo1" class="Foo" p:someOrgValue="#{T(org.example.Bar).myValue}"/>

这还有使用名称空间配置的其他优点:

<tx:annotation-driven order="#{T(org.example.Bar).myValue}"/>

12

不要忘记指定架构位置。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
     http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-3.1.xsd">


</beans>

4

为上述实例添加另一个示例。这就是使用Spring在bean中使用静态常量的方式。

<bean id="foo1" class="Foo">
  <property name="someOrgValue">
    <util:constant static-field="org.example.Bar.myValue"/>
  </property>
</bean>
package org.example;

public class Bar {
  public static String myValue = "SOME_CONSTANT";
}

package someorg.example;

public class Foo {
    String someOrgValue; 
    foo(String value){
        this.someOrgValue = value;
    }
}

1
<util:constant id="MANAGER"
        static-field="EmployeeDTO.MANAGER" />

<util:constant id="DIRECTOR"
    static-field="EmployeeDTO.DIRECTOR" />

<!-- Use the static final bean constants here -->
<bean name="employeeTypeWrapper" class="ClassName">
    <property name="manager" ref="MANAGER" />
    <property name="director" ref="DIRECTOR" />
</bean>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.