2013-09-03 32 views
10

tôi tiêm Strings trong cấu hình mùa xuân của tôi bằng cách làm như sau:shortcut cho tiêm chuỗi với mùa xuân

<bean class="java.lang.String"> 
    <constructor-arg type="java.lang.String" value="Region" /> 
</bean> 

Có cách nào ngắn hơn để làm việc đó?

Cập nhật: Tôi đang sử dụng spring 3.0.3.

Đây là những thực tế sử dụng để cư một danh sách:

 <list> 
      <bean class="java.lang.String"> 
       <constructor-arg type="java.lang.String" value="Region" /> 
      </bean> 
      ... 

Có vẻ như việc này:

<list> 
    <value>Region</value> 
    <value>Name</value> 
    .... 

Nhưng tôi đồng ý với ý kiến ​​cho rằng điều này cuối cùng sẽ đi vào một bất động sản và được thông qua trong .

+0

Phiên bản nào của mùa xuân? –

+0

Bạn đang sử dụng cái này như thế nào? Bạn không thể sử dụng 'value =" Region "' thay cho bean này? – Qwerky

+0

Đó không phải là doping bất hợp pháp? –

Trả lời

13

Bạn không nên có String đậu. Chỉ cần sử dụng giá trị của họ trực tiếp.

Tạo một thuộc tính tập tin strings.properties và đặt nó trên classpath

strings.key=Region 

Khai báo một PropertyPlaceholderConfigurer

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <value>strings.properties</value> 
    </property> 
</bean> 

Sau đó, chú thích Strings instance field như

@Value("${strings.key}") 
private String key; 

mùa xuân sẽ bơm giá trị từ tệp strings.properties e vào chuỗi key này.

Điều này rõ ràng giả định rằng lớp học trong đó chú thích @Value xuất hiện là một bean được quản lý trong cùng một ngữ cảnh như PropertyPlaceholderConfigurer.

+1

Lưu ý rằng bạn có thể sử dụng '@ Value' cũng trên tham số hàm tạo. –

+0

Tôi không thấy cách này là ngắn hơn và hiệu quả hơn cách đơn giản là beaning một lớp String thro String constructor như đã được thực hiện bởi người hỏi. Vấn đề ở đây là gì? –

+0

@BlessedGeek Đối với một, bạn không nên xem xét một 'String' như là một _bean_. Spring sẽ không thực sự quản lý vòng đời của một 'String' như nó sẽ, ví dụ, một số thể hiện lớp' @ Service'. Bạn nên xem xét các kiểu nguyên thủy, 'String' và' Class' là các kiểu cơ sở được xử lý bởi Spring chứ không phải là bean. Khi bạn đã khai báo 'PropertyPlaceholderConfigurer', bạn có thể khai báo bao nhiêu thuộc tính tùy thích (thay vì' 'khai báo) và tham khảo chúng với ký hiệu giữ chỗ' $ {..} '. –

4

Không cần tạo hạt đậu loại String. Chỉ cần chuyển giá trị cho constructor-arg:

<bean id="foo" class="x.y.Foo"> 
    <constructor-arg value="Region"/> 
</bean> 

hoạt động.

0

Ngoài các câu trả lời khác và nếu bạn đang sử dụng Spring 3.1+, bạn có thể sử dụng không gian tên hàm tạo.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:c="http://www.springframework.org/schema/c" <-- add c namespace 
    ... 

<bean id="someClass" class="a.b.c.SomeClass" 
    c:someProperty="Region" 
/> 
Các vấn đề liên quan