Mùa xuân - Đậu tự động đấu dây
Bạn đã học cách khai báo bean bằng cách sử dụng phần tử <bean> và chèn <bean> bằng cách sử dụng các phần tử <constructor-arg> và <property> trong tệp cấu hình XML.
Hộp đựng mùa xuân có thể autowire mối quan hệ giữa các bean cộng tác mà không sử dụng các phần tử <constructor-arg> và <property>, giúp cắt giảm số lượng cấu hình XML bạn viết cho một ứng dụng lớn dựa trên Spring.
Chế độ tự động
Sau đây là các chế độ tự động phân bổ, có thể được sử dụng để hướng dẫn vùng chứa Spring sử dụng tính năng tự động phân bổ để chèn phụ thuộc. Bạn sử dụng thuộc tính autowire của phần tử <bean /> để chỉ địnhautowire chế độ cho một định nghĩa bean.
Sr.No | Chế độ & Mô tả |
---|---|
1 | no Đây là cài đặt mặc định có nghĩa là không có tự động kết nối và bạn nên sử dụng tham chiếu bean rõ ràng để nối dây. Bạn không có gì để làm đặc biệt cho hệ thống dây điện này. Đây là những gì bạn đã thấy trong chương Dependency Injection. |
2 | bằng tên Autowiring theo tên thuộc tính. Spring container xem xét các thuộc tính của bean mà thuộc tính autowire được đặt thành byName trong tệp cấu hình XML. Sau đó, nó cố gắng khớp và nối các thuộc tính của nó với các bean được xác định bởi cùng tên trong tệp cấu hình. |
3 | theo loại Tự động tạo theo kiểu dữ liệu thuộc tính. Spring container xem xét các thuộc tính của bean mà thuộc tính autowire được đặt thành byType trong tệp cấu hình XML. Sau đó, nó cố gắng khớp và nối một thuộc tính nếutypekhớp với chính xác một trong các tên bean trong tệp cấu hình. Nếu tồn tại nhiều hơn một hạt đậu như vậy, một ngoại lệ chết người sẽ bị loại bỏ. |
4 | constructor Similar to byType, but type applies to constructor arguments. If there is not exactly one bean of the constructor argument type in the container, a fatal error is raised. |
5 | autodetect Spring first tries to wire using autowire by constructor, if it does not work, Spring tries to autowire by byType. |
You can use byType or constructor autowiring mode to wire arrays and other typed-collections.
Limitations with autowiring
Autowiring works best when it is used consistently across a project. If autowiring is not used in general, it might be confusing for developers to use it to wire only one or two bean definitions. Though, autowiring can significantly reduce the need to specify properties or constructor arguments but you should consider the limitations and disadvantages of autowiring before using them.
Sr.No. | Limitations & Description |
---|---|
1 | Overriding possibility You can still specify dependencies using <constructor-arg> and <property> settings which will always override autowiring. |
2 | Primitive data types You cannot autowire so-called simple properties such as primitives, Strings, and Classes. |
3 | Confusing nature Autowiring is less exact than explicit wiring, so if possible prefer using explict wiring. |