2012-04-16 26 views
36

Tôi cần xác định giá trị chuỗi trong tệp XML ngữ cảnh mùa xuân được chia sẻ bởi nhiều bean.Có cách viết tắt để tạo hằng số Chuỗi trong tệp XML ngữ cảnh mùa xuân không?

Đây là cách tôi làm điều đó:

<bean id="aSharedProperty" class="java.lang.String"> 
    <constructor-arg type="java.lang.String" value="All beans need me :)"/> 
</bean> 

Tạo một bean java.lang.String bằng cách thông qua một đối số nhà xây dựng của java.lang.String dường như kludgy.

Có lối tắt không?

Tôi biết thuộc tính này có thể được chuyển bằng cách sử dụng PropertyOverrideConfigurer, nhưng tôi muốn giữ thuộc tính này trong tệp XML.

Trả lời

13

Một kí hiệu để các giải pháp bởi mrembisz đề xuất đi như thế này:

<context:property-placeholder properties-ref="myProperties"/> 

<util:properties id="myProperties"> 
    <prop key="aSharedProperty">All beans need me :)</prop> 
</util:properties> 
4

Bạn có thể sử dụng như sau:

<bean id="abstractParent" abstract="true"> 
    <property name="sharedProperty" value="All child beans need me" /> 
</bean> 

<bean id="bean1" class="MyClass1" parent="abstractParent"> 
    ...non-shared properties... 
</bean> 

<bean id="bean2" class="MyClass2" parent="abstractParent"> 
    ...non-shared properties... 
</bean> 

Tuy nhiên, dựa vào các tài sản có cùng tên, do đó không thể áp dụng cho bạn.

24

Bạn có thể sử dụng PropertyPlaceholderConfigurer và giữ giá trị trong xml:

<context:property-placeholder properties-ref="myProperties"/> 

<bean id="myProperties" 
    class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="properties"> 
    <props> 
     <prop key="aSharedProperty">All beans need me :)</prop> 
    </props> 
    </property> 
</bean> 

Sau đó, bạn tham khảo nó với:

<bean id="myBean" class="my.package.MyClass"> 
    <property name="someField" value="${aSharedProperty}"/> 
</bean> 
+1

Bạn chỉ ra cách sau khi thực hiện "aSharedProperty" này có thể được tham chiếu để tạo các hạt khác? (chỉ để những người mới đến mùa xuân đến trang này nhận được tất cả các chi tiết ngay tại đây :)) – akirekadu

+0

Chắc chắn, có bạn đi. – mrembisz

+0

Xem câu trả lời của tôi dưới đây để biết ký pháp viết tắt giúp bạn có thể thực hiện mà không cần giới thiệu PropertiesFactoryBean. – Kaitsu

3

Something Tôi đã sử dụng trong quá khứ là SpEL để đảm bảo rằng một bean có giá trị tương tự như nhau:

<bean id="myBean" class="xxx.yyy.Foo" > 
    <property name="myProperty" value="1729" /> 
</bean> 

<bean id="copyCat" class="xxx.yyy.Bar" > 
    <property name="anotherProperty" value="#{myBean.myProperty}" /> 
</bean> 

Tôi đã tìm thấy điều này là đặc biệt hữu ích khi thiết lập các giá trị đã làm một cái gì đó khác hơn một bài tập đơn giản.

Các vấn đề liên quan