2011-07-11 39 views
16

tôi có ba (A, B, C) mùa xuân context.xml, A được cho cấu hình cơ bản, B và C nhập khẩu A.xác định một chuỗi trong bối cảnh mùa xuân

Trong một bean trên AI có:

 
<bean class="com.example.Ex"> 
    <property name="aString" value="${myString}" /> 
</bean> 

bây giờ tôi muốn xác định thuộc tính myString trên bối cảnh B và C, có thể thực hiện mà không tạo và tải hai tệp thuộc tính khác nhau không?

Trả lời

49

Bạn có thể thử một cách khác bằng cách khai báo bean loại String, thay vì giao dịch với Thuộc tính.

Bằng cách này:

Một

<bean class="com.example.Ex"> 
    <property name="aString" ref="str" /> 
</bean> 

Và sau đó bạn khai báo trong B và C ngữ cảnh các "str" ​​tài liệu tham khảo theo cách này:

B

<bean id="str" class="java.lang.String"> 
    <constructor-arg value="string_1"/> 
</bean> 

C

<bean id="str" class="java.lang.String"> 
    <constructor-arg value="string_2"/> 
</bean> 
+1

Đó là sự thật ... lớp String có một hàm tạo với một Chuỗi ... Tôi không nghĩ đến nó ... cảm ơn bạn! – rascio

+0

Cách nào là tốt nhất bằng cách thực hành? và tại sao? –

-7

Đây cũng là một trong những cách.

<bean id="str" class="com.example.Ex"> 
<constructor-arg type="java.lang.String" value="INDIA"/> 

+1

Điều này không giúp giải quyết vấn đề có ngữ cảnh B và C có các giá trị khác nhau cho chuỗi như được quyết định bởi ngữ cảnh A – Kieran

+0

hơn nữa bạn ngụ ý rằng có một hàm tạo cho lớp Ex, chấp nhận một String làm đối số. –

4

Đối với đầy đủ ở đây một cách khác để tạo ra một chuỗi:

Thay vì gọi constructor String mà buộc một đối tượng mới được tạo ra không cần thiết nó có thể là một ý tưởng tốt hơn để sử dụng valueOf phương thức mà tại đây có thể phục vụ như một nhà xây dựng "không làm gì":

<bean id="str" class="java.lang.String" factory-method="valueOf"> 
    <constructor-arg value="string_1"/> 
</bean> 

Tuy nhiên đây chỉ là học phí để phân tích cú pháp bổ sung XML bute mà sẽ gây ra các chuỗi được tạo ra cũng có thể lớn hơn hiệu suất của việc gọi valueOf thay vì hàm tạo.

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