स्प्रिंग - बीन इनिशियलाइज़ेशन के लिए स्थैतिक अंतिम क्षेत्रों (स्थिरांक) का उपयोग करना


82

क्या इस तरह से CoreProtocolPNames वर्ग के स्थिर अंतिम क्षेत्रों के उपयोग से बीन को परिभाषित करना संभव है:


<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"; 
}

यदि यह संभव है, तो ऐसा करने का सबसे अच्छा तरीका क्या है?


या तो प्रश्न को हटा दें या इसे छोड़ दें, लेकिन बीच में कुछ नहीं। धन्यवाद।
पास्कल थिवेंट

जवाबों:


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"

लेकिन स्प्रिंग 3 के लिए, @Valueएनोटेशन और अभिव्यक्ति भाषा का उपयोग करना क्लीनर होगा । जो इस तरह दिखता है:

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

2
schemaLocation = ": भी स्कीमा स्थान xsi जोड़ने springframework.org/schema/util springframework.org/schema/util/spring-util-3.1.xsd ">
संपत

1
अपनी XML config के लिए स्प्रिंग ईएल का उपयोग करते हुए इस काम करता है: # {टी (com.foo.Headers) .HEADER_STATUS} के अनुसार jonstefansson.blogspot.com/2011/02/...
8bitme

1
जब एनोटेशन द्वारा बीन घोषित किया जाता है तो हम किसी क्षेत्र को निजी और अंतिम कैसे चिह्नित कर सकते हैं?
गुंजन शाह

क्या आप बता सकते हैं कि T(Type)आपके @Valueएनोटेशन में क्या है ? मैं उस अंकन से अपरिचित हूं। मैंने हमेशा इस्तेमाल किया है@Value("${my.jvm.arg.name}")
ब्लेक

मैं अभी भी 'क्लीनर' एनोटेशन के लाभों से जूझ रहा हूं - @Value के साथ परेशानी यह है, आपको कॉन्फ़िगरेशन बदलने के लिए अपना कोड फिर से जारी करना होगा - एक्सएमआर का उपयोग करके व्हाट्सएप आप कॉन्फ़िगरेशन को अलग-अलग री-रिलीज़ कर सकते हैं, या अलग-अलग सेट कर सकते हैं विन्यास, पर्यावरण पर निर्भर करता है।
एड रान्डेल

27

या, एक विकल्प के रूप में, XML में सीधे स्प्रिंग ईएल का उपयोग कर:

<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

उपरोक्त उदाहरण के लिए जोड़ने के लिए एक और उदाहरण। यह है कि आप स्प्रिंग का उपयोग करके बीन में स्थिर स्थिरांक का उपयोग कर सकते हैं।

<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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.