2013-01-04 36 views
7

Có thể tải trình giữ chỗ lồng nhau từ bên trong tệp thuộc tính không? Tôi đang cố gắng tải một URL động.Tải Trình giữ chỗ lồng nhau từ Tệp thuộc tính với Spring

Ví dụ, nếu tập tin thuộc tính của tôi chứa

my.url=http://localhost:8888/service/{nestedProperty}/ 

Có cách nào để tải các giá trị cho {} nestedProperty khi chạy? Tương tự như hành vi của một ResourceBundle. Nếu vậy, làm thế nào tôi sẽ có thể có hiệu quả nhanh chóng String? Cho đến nay tôi đang suy nghĩ

<bean id="myURLString" class="java.lang.String" scope="prototype" lazy-init="true"> 
    <property name="URL" value="${my.url}" /> 
</bean> 

... nhưng tôi không chắc chắn những thuộc tính nào cần lồng. Tôi muốn để có được một bean sử dụng chú thích nếu có thể, mặc dù tôi hiện đang có một cái gì đó dọc theo dòng của

ctx.getBean("myURLString", String.class, new Object[] { nestedProperty}); 

Tôi đã nhìn vào PropertyPlaceholderConfigurer và một số tài sản khác nộp câu hỏi trên đây, nhưng tôi dường như không thể để tìm hiểu xem điều này có thể xảy ra hay không.

Tôi cũng nên lưu ý rằng tôi muốn tải được thuộc tính lồng nhau này động từ bên trong mã của tôi, hoặc ít nhất là vận dụng chúng từ đó

Trả lời

9

Có nó có thể (có thể thông qua @PostConstruct?):

my.url=http://localhost:8888/service/${nestedProperty} 
nestedProperty=foo/bar/baz 

Thêm ký hiệu đô la vào trước dấu ngoặc ôm trong ví dụ của bạn và bạn đã cài đặt!

Để thực sự sử dụng tài sản giải quyết triệt để làm điều này:

@Value("${my.url}") 
private String url; 

trong một đậu mùa xuân.

+0

Tôi có cần xác định rõ ràng thuộc tính này trong định nghĩa bean của mình không? – lase

+0

'nestedProperty' dùng để chỉ thuộc tính của tên đó - dòng thứ hai của ví dụ - không phải là một bean. Spring tải tất cả các thuộc tính trong tất cả các tệp được cấu hình và giải quyết chúng với nhau. Miễn là bạn tránh tham chiếu vòng tròn bạn vẫn ổn. –

+0

Điều này cho phép tôi chỉ định động các thuộc tính lồng nhau từ cuộc gọi ctx.getBean() thay vì sử dụng giá trị tệp thuộc tính của 'nestedProperty'? – lase

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