2010-07-20 6 views
117

dự liệu here nó khẳng địnhXuân classpath tiền tố chênh lệch

tiền tố đặc biệt này quy định rằng tất cả các nguồn lực classpath phù hợp với tên được đặt phải được lấy (nội bộ, điều này chủ yếu xảy ra qua một ClassLoader.getResources (. ..) cuộc gọi), và sau đó sáp nhập để tạo thành định nghĩa ngữ cảnh ứng dụng cuối cùng .

Ai đó có thể giải thích điều này?

Sự khác nhau giữa việc sử dụng classpath*:conf/appContext.xml như trái ngược với classpath:conf/appContext.xml không có dấu sao.

Trả lời

168

SIMPLE ĐỊNH NGHĨA

Các classpath*:conf/appContext.xml chỉ đơn giản có nghĩa là tất cả appContext.xml file dưới conf thư mục trong tất cả các lọ của bạn trên classpath sẽ được chọn và tham gia vào một bối cảnh ứng dụng lớn.

Ngược lại, classpath:conf/appContext.xml sẽ tải chỉ một tệp như vậy ... thứ nhất được tìm thấy trên đường dẫn lớp của bạn.

+6

có một sự khác biệt thú vị giữa chúng. Xem câu hỏi của tôi cũng: http: // stackoverflow.com/questions/16985770/runwith-and-contextconfiguration-weird-behavior – Eugene

+17

Một điều rất quan trọng - nếu bạn sử dụng * và Spring không tìm thấy kết quả phù hợp, nó sẽ không phàn nàn. Nếu bạn không sử dụng * và không có kết quả phù hợp, ngữ cảnh sẽ không khởi động (!) –

37

Cú pháp classpath*:... hữu ích chủ yếu khi bạn muốn xây dựng ngữ cảnh ứng dụng từ nhiều tệp định nghĩa bean, sử dụng cú pháp ký tự đại diện. Ví dụ, nếu bạn xây dựng bối cảnh của mình bằng cách sử dụng classpath*:appContext.xml, đường dẫn lớp sẽ được quét cho mọi tài nguyên được gọi là appContext.xml trong đường dẫn lớp và các định nghĩa bean từ tất cả chúng được hợp nhất thành một ngữ cảnh duy nhất.

Ngược lại, classpath:conf/appContext.xml sẽ lấy một và chỉ một tệp có tên appContext.xml từ đường dẫn lớp. Nếu có nhiều hơn một, những người khác sẽ bị bỏ qua.

+1

Liệu classpath * cũng sẽ tìm trong thư mục con? Nói cách khác, nếu tôi có appContext.xml trong classpath gốc và một trong /dir/appContext.xml, nó sẽ tải cả khi tôi sử dụng classpath *: appContext.xml? – AHungerArtist

17

classpath *: Nó đề cập đến một danh sách tài nguyêntải tất cả tập tin như vậy hiện diện trong classpath và danh sách thể để trống và nếu không có tập tin hiện diện trong classpath sau đó ứng dụng không ném bất kỳ ngoại lệ (chỉ bỏ qua lỗi).

classpath: Nó đề cập đến một nhất định nguồntải chỉ file đầu tiên được tìm thấy trên classpath và nếu không có tập tin hiện diện trong classpath nó sẽ ném một ngoại lệ

java.io.FileNotFoundException: class path resource [conf/appContext.xml] cannot be opened because it does not exist