2011-09-21 26 views
5

Tôi có một ứng dụng dựa trên mùa xuân 2.x lớn với một vài trăm tệp applicationContext.xml và hàng nghìn nhà máy đậu/đậu.Làm thế nào để biết chính xác Spring autowire là gì?

Hầu hết các cấu hình XML này nói một cái gì đó như default-autowire="byName", có hiệu quả bật tự động, nhưng chỉ một phần nhỏ của đậu thực sự là autowired. Hầu hết các thuộc tính bean được thiết lập rõ ràng.

(Điều này là để lịch sử lý do, tôi đoán đó là cách bạn gọi nó là khi bạn không đủ thông minh trong quá khứ.)

Bây giờ chúng tôi muốn loại bỏ autowiring ở tất cả. Chúng tôi tin rằng chỉ một phần nhỏ của đậu thực sự là autowired - nhưng chúng tôi không biết, những gì và đã được chính xác. Câu hỏi của tôi là:

Làm thế nào chúng ta có thể tìm hiểu những gì và đã được chính xác được autowired bởi Spring?

Lý tưởng nhất, chúng ta cần có danh sách các bean/thuộc tính để chúng ta có thể tiêm những điều này một cách rõ ràng trong các cấu hình XML. Nhưng trước khi đi sâu vào nội bộ mùa xuân bằng một trình gỡ rối, tôi quyết định hỏi có ai đó trên SF có thể đã giải quyết một nhiệm vụ tương tự không.

ps. Tôi không có ý định thảo luận xem liệu autowiring là tốt hay xấu. Chúng tôi có một số lý do kỹ thuật nội bộ để loại bỏ autowiring, đó là tất cả.

Trả lời

7

Bạn có thể thử bật ghi nhật ký DEBUG vào Mùa xuân. Nó in rất nhiều thông tin trong giai đoạn khởi tạo. Tôi đặt cược tin nhắn tự động-dây cũng được in ra. Bạn chỉ cần tìm thông điệp đó và sau đó phân tích cú pháp tệp nhật ký sau khi ứng dụng được khởi tạo hoàn toàn.

CẬP NHẬT: Tôi tin rằng AbstractAutowireCapableBeanFactory chịu trách nhiệm về logic tự động. Bạn có thể kiểm tra phương thức autowireByName. Nó tạo ra thông điệp tường trình sau mà bạn có thể tìm kiếm trong tệp nhật ký:

logger.debug("Added autowiring by name from bean name '" + beanName + 
    "' via property '" + propertyName + "' to bean named '" + propertyName + "'"); 
+1

Cảm ơn bạn, tôi cũng đã tìm thấy báo cáo nhật ký này. Tôi đã xóa ca. 20 autowirings trong đậu của chúng tôi. – lexicore

1

Dự đoán của tôi là bật trình ghi nhật ký (log4j) cho gói đó (gói có quyền tự động) trong một tệp cụ thể.

Điều đó sẽ xuất tên của tất cả các hạt.

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