2009-05-20 28 views
8

Tôi cần lưu trữ một số thông số cấu hình cho một ứng dụng web sử dụng khung công tác lò xo.Lưu trữ các thuộc tính tùy chỉnh trong aplicationContext.xml Tệp Spring

Thông thường tôi sẽ sử dụng tệp configurationfile.properties nhưng tôi tự hỏi liệu tôi có thể lưu trữ các giá trị đó trong tệp applicationContext.xml hay không.

Một workaround có thể là để tạo ra một lớp JavaBean để lưu trữ các giá trị, và xây dựng lớp rằng việc sử dụng lò xo, một cái gì đó như thế này:

<bean id="configurationBean" class="mypackage.someClass"> 
<property name="confValue1"> 
    <value>myValue1</value> 
</property> 
.... 
</bean> 

Nhưng tôi muốn biết nếu là có một cách để lưu trữ những các tham số mà không cần tạo lớp đó.

Xin cảm ơn trước.


Tôi nghĩ rằng giải pháp tốt nhất phù hợp với yêu cầu của tôi là sử dụng phiên bản java.util.Properties làm Spring Bean.

Cảm ơn tất cả.

Trả lời

15

Điều này sẽ hoạt động với cú pháp sau.

<bean id="props" class="java.util.Properties" > 
    <constructor-arg> 
     <props> 
      <prop key="myKey">myValue</prop> 
      <prop ...> 
     </props> 
    </constructor-arg> 
</bean> 

Bạn đang lợi dụng thực tế là java.util.Properties có một hàm tạo bản sao nhận đối tượng Thuộc tính.

Tôi làm điều này cho một HashSet cũng có một hàm tạo bản sao (cũng như HashMaps và ArrayLists) và nó hoạt động hoàn hảo.

+1

ApplicationContext app = new ClassPathXmlApplicationContext ("app.xml"); System.out.println (app.getBean ("đạo cụ")); kết quả là {}. Bất kỳ ý tưởng làm thế nào để sửa lỗi này? – DeepNightTwo

1

Mùa xuân có hỗ trợ dựng sẵn để chỉ định các thuộc tính trong XML ngữ cảnh ứng dụng. Xem section 3.3.2.4 tài liệu Tham khảo mùa xuân.

+0

Cảm ơn bạn đã trả lời. Nhưng tôi muốn tránh tạo một đối tượng POJO để lưu trữ các thuộc tính. Tôi đọc liên kết bạn đã cung cấp, tôi có thể chỉ định các thuộc tính nhưng luôn nằm trong phần tử định nghĩa , để liên kết bean với lớp POJO. – HyLian

+0

Vì vậy, bạn muốn thực tế là một thể hiện của java.util.Properties? – Mark

+0

Đó là những gì tôi đang tìm kiếm. Cảm ơn bạn :) – HyLian

1

Tôi nghĩ bạn sẽ nhận được kết quả tốt nhất bằng cách sử dụng PropertyPlaceholderConfigurer của Spring cho phép bạn ánh xạ các giá trị từ tệp .properties thông thường với các thuộc tính được xác định trên hạt của bạn.

http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-placeholderconfigurer

Ví dụ cho thấy làm thế nào để thiết lập các thuộc tính kết nối JDBC trực tiếp trên một thể hiện của javax.sql.DataSource, loại bỏ sự cần thiết của một trung gian "đậu cấu hình."

+0

Cảm ơn bạn đã trả lời. Giải pháp của bạn có vẻ không tồi, nhưng tôi không muốn tạo riêng biệt.các tệp thuộc tính nhưng chỉ lưu trữ các giá trị thuộc tính trong tệp appContext.xml và truy cập chúng trong mã Java. – HyLian

+0

Sau đó, bạn muốn tham khảo liên kết Mark được cung cấp. Nó cho thấy làm thế nào bạn có thể khai báo một thể hiện của java.util.Properties trong XML: [email protected] [email protected] [email protected]

+0

@HyLian bạn không thể chỉ cần đặt thuộc tính tùy ý (trông giống như một tập tin .properties) trong một Tệp XML. Bạn phải theo cấu trúc XML (như @ brd6644 đã đề cập ở trên) hoặc đặt nó trong một tệp .properties riêng biệt, như ông đã đề cập trong bài đăng của mình. –

0

Cách tốt nhất là sử dụng lò xo PropertyPlaceholderConfigurer

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:yourconfigurationfile.properties</value> 
     </list> 
    </property> 
</bean> 

sau đó

<bean id="configurationBean" class="mypackage.someClass"> 
    <property name="confValue1"> 
     <value>${myvalue1}</value> 
    </property> 
    .... 
</bean> 

và trong yourconfigurationfile.properties

myvalue1= value1 
Các vấn đề liên quan