Trong một thời gian dài tôi tin rằng có một giá trị trong việc có một "tập trung, khai báo, cấu hình" như các tập tin xml tất cả chúng ta sử dụng để sử dụng. Sau đó, tôi nhận ra rằng hầu hết các nội dung trong các tệp không phải là cấu hình - nó không bao giờ bị thay đổi ở bất cứ đâu sau khi phát triển. Sau đó, tôi nhận ra rằng "tập trung" chỉ có giá trị trong các hệ thống khá nhỏ - chỉ trong các hệ thống nhỏ, bạn sẽ có thể grok một tập tin cấu hình như một toàn bộ. Và cái gì thực sự là giá trị của sự hiểu biết về hệ thống dây điện như một tổng thể, khi cùng một "dây" được sao chép chủ yếu bởi các phụ thuộc trong mã? Vì vậy, điều duy nhất tôi giữ là siêu dữ liệu (chú thích), mà vẫn là loại khai báo. Những thay đổi này không bao giờ thay đổi khi chạy và chúng là không bao giờ "cấu hình" dữ liệu mà ai đó sẽ thay đổi khi đang di chuyển - vì vậy tôi nghĩ việc giữ mã trong mã là tốt đẹp.
Tôi sử dụng toàn bộ hệ thống tự động đấu dây càng nhiều càng tốt. Tôi thích nó. Tôi sẽ không quay trở lại mùa xuân kiểu cũ trừ khi bị đe dọa tại điểm súng. Lý do tôi thích hoàn toàn @Autowired
đã thay đổi theo thời gian.
Ngay bây giờ tôi nghĩ rằng lý do quan trọng nhất để sử dụng autowiring là có ít trừu tượng hơn trong hệ thống của bạn để theo dõi. "Tên đậu" đã biến mất một cách hiệu quả. Nó chỉ ra tên đậu chỉ tồn tại vì xml. Vì vậy, một lớp đầy đủ các indirections trừu tượng (nơi bạn sẽ dây bean-tên "foo" vào đậu "bar") đã biến mất. Bây giờ tôi nối giao diện "Foo" vào bean của tôi trực tiếp, và việc triển khai thực hiện được chọn theo profile thời gian chạy. Điều này cho phép tôi làm việc với mã khi truy tìm phụ thuộc và triển khai. Khi tôi thấy một phụ thuộc tự động trong mã của tôi, tôi chỉ có thể nhấn phím "đi để thực hiện" trong IDE của tôi và lên đến danh sách các triển khai đã biết. Trong hầu hết các trường hợp, chỉ có một lần triển khai và tôi vào thẳng lớp học. Không thể đơn giản hơn nhiều, và tôi luôn biết chính xác những gì đang được sử dụng (tôi cho rằng điều ngược lại gần với sự thật với xml hệ thống dây điện - vui như thế nào quan điểm của bạn thay đổi!)
Bây giờ bạn có thể nói rằng nó chỉ là một lớp rất đơn giản, nhưng mỗi lớp trừu tượng mà chúng tôi thêm vào hệ thống của chúng tôi tăng độ phức tạp. Tôi thực sự không nghĩ rằng xml đã từng thêm bất kỳ giá trị thực nào vào bất kỳ hệ thống nào mà tôi đã làm việc cùng.
Hầu hết các hệ thống tôi từng làm việc chỉ có một cấu hình của môi trường thời gian chạy sản xuất. Có thể có các cấu hình khác để kiểm tra và vân vân.
Tôi muốn nói rằng autowiring đầy đủ là ruby-on-rails của mùa xuân: Nó bao gồm các khái niệm rằng có một mô hình sử dụng bình thường và phổ biến mà hầu hết các trường hợp sử dụng theo. Với cấu hình XML, bạn cho phép nhiều mức sử dụng cấu hình nhất quán/không phù hợp có thể/không được dự định. Tôi đã nhìn thấy rất nhiều cấu hình xml đi overboard với mâu thuẫn - nó có được refactored cùng với mã? Tư tưởng không. Những biến thể đó có lý do không? Thường thì không.
Chúng tôi hầu như không sử dụng vòng loại trong cấu hình của mình và tìm ra các cách khác để giải quyết các tình huống này. Đây là một "nhược điểm" rõ ràng mà chúng ta gặp phải: Chúng ta đã thay đổi một chút cách chúng ta mã hóa để làm cho nó tương tác mượt mà hơn với autowiring: Kho lưu trữ của khách hàng không còn thực hiện giao diện chung Repository<Customer>
nhưng chúng ta tạo một giao diện CustomerRepository
mở rộng Repository<Customer>
. Đôi khi cũng có một hoặc hai mẹo khi nói đến phân lớp. Nhưng nó thường chỉ chỉ cho chúng ta theo hướng gõ mạnh hơn, mà tôi tìm thấy hầu như luôn luôn là một giải pháp tốt hơn.
Nhưng có, bạn đang liên kết với một kiểu DI cụ thể mà chủ yếu là mùa xuân. Chúng tôi thậm chí không làm cho người định cư công cộng cho phụ thuộc nữa (Vì vậy, bạn có thể tranh luận rằng chúng tôi đang +1 trong bộ phận đóng gói/thông tin ẩn) Chúng tôi vẫn có một số xml trong hệ thống của mình, nhưng xml về cơ bản là chỉ có những bất thường . Full autowiring tích hợp độc đáo với xml.
Điều duy nhất chúng tôi cần bây giờ là dành cho @Component
, @Autowired
và phần còn lại được bao gồm trong JSR (như JSR-250), vì vậy chúng tôi không phải gắn liền với mùa xuân. Đây là cách mọi thứ đã xảy ra trong quá khứ (các công cụ java.util.concurrent
lò xo để tâm trí), vì vậy tôi sẽ không hoàn toàn ngạc nhiên nếu điều này xảy ra một lần nữa.
Tôi cũng quan tâm đến chủ đề này - định cấu hình ứng dụng MVC của bạn qua chú thích thay vì XML có vẻ như nó sẽ dẫn đến nhiều tìm kiếm "lớp nào được ánh xạ tới URL này?" "ai đang xử lý cái này?" Tôi muốn có một nguồn cấu hình đơn lẻ –
thuật ngữ "@Autowiring" có vẻ gây hiểu nhầm ở đây.Vì bạn cũng có thể làm autowiring với cấu hình XML, câu hỏi ban đầu nên được rephrased là "Ưu và nhược điểm của việc sử dụng các chú thích Spring". Câu trả lời được cung cấp tập trung nhiều hơn vào các khía cạnh của autowiring và ít hơn về khía cạnh của việc sử dụng chú thích. –
Bản sao có thể có của [Hiểu mùa xuân @Được sử dụng hết hạn] (https://stackoverflow.com/questions/19414734/understanding-spring-autowired-usage) – tkruse