2009-05-18 3 views
6

Tôi đang làm việc trên dự án Spring 2.0, không có chú thích. Chúng tôi đang sử dụng một số bean PropertyPlaceholderConfigurer với các tiền tố và hậu tố khác nhau để tải các thuộc tính từ các tệp thuộc tính khác nhau. Điều này làm việc rất đẹp.Cách phát hiện các thuộc tính không sử dụng trong Spring

Do số lượng lớn tệp và thuộc tính thuộc tính, tôi muốn ứng dụng liệt kê các thuộc tính là không được sử dụng. Điều đó có nghĩa là các thuộc tính được cấu hình trong một tệp thuộc tính, nhưng không bao giờ được tham chiếu trong ngữ cảnh ứng dụng Spring.

Tôi đã viết một bean thực hiện BeanFactoryPostProcessor và đã thực hiện một số thủ thuật để tìm các tham chiếu trong ngữ cảnh ứng dụng với các PropertyPlaceHolderConfigurers khác nhau. Điều này mang lại cho tôi một danh sách các thuộc tính được sử dụng.

Tuy nhiên, tôi không thể truy cập vào các thuộc tính được tải bởi Trình cấu hình PlaceHolderConfigurers. Do đó, tôi không thể hiển thị các thuộc tính không được sử dụng.

Có cách nào (đơn giản) để truy cập các thuộc tính của PropertyPlaceholderConfigurer không? Bất kỳ đề xuất nào khác về cách giải quyết vấn đề này?

Sửa: Các giải pháp đã được truy cập vào mergeProperties metod, như vậy:

PropertyPlaceholderConfigurer ppc = 
    (PropertyPlaceholderConfigurer) applicationContext.getBean("yourBeanId"); 
Method m = PropertiesLoaderSupport.class.getDeclaredMethod("mergeProperties", 
      new Class[] {}); 
m.setAccessible(true); 
Properties loadedProperties = (Properties) m.invoke(propertyPlaceHolder, null); 

Sau khi nhận được các thuộc tính đã nạp đầu tiên, và lấy các beandefinitions trong BeanFactoryPostProcessing, phần còn lại rất đơn giản. Trừ hai bộ sưu tập, và thì đấy: Bây giờ chúng ta có thể liệt kê các thuộc tính không sử dụng.

Trả lời

3

Bạn có thể thử gọi phương thức được bảo vệ mergeProperties bằng cách sử dụng phản chiếu để giữ danh sách đầy đủ thuộc tính, và sau đó, như các áp phích khác đã nói, loại bỏ tất cả các thuộc tính thực sự được sử dụng để kết thúc với bộ không sử dụng tính chất.

Có thể hơi quá khắt khe đối với mã sản xuất, nhưng tôi cho rằng bạn sẽ chỉ chạy điều này trong cài đặt thử nghiệm đơn vị để tạo báo cáo này.

1

Cách tạo lớp con của riêng bạn của PropertyPlaceholderConfigurer sẽ giữ tham chiếu đến đối tượng Thuộc tính của nó và cung cấp một trình truy cập. BeanFactoryPostProcessor của bạn sau đó sẽ có thể truy cập vào mỗi đối tượng Properties ban đầu và kết hợp với danh sách các thuộc tính được sử dụng, bạn có thể tìm ra các thuộc tính không được sử dụng.

+0

Điều đó sẽ yêu cầu tất cả các PropertyPlaceHolderConfigurers phải được chỉnh sửa, điều này là có thể, nhưng tôi không muốn làm. Bằng cách sử dụng giải pháp ở trên, tôi cũng có thể phát hiện các thuộc tính bị thiếu trong PropertyPlaceHolderConfigurers mới được thêm bởi "new guy" :-) – Rolf

0

Bạn không thể lặp qua danh sách các thuộc tính đã sử dụng và xóa chúng khỏi một tập hợp trùng lặp của tất cả các thuộc tính? Điều đó sẽ để lại những người không sử dụng phía sau.

+0

Không có getter cho các thuộc tính được sử dụng và không có getter cho tất cả các thuộc tính. – Rolf