Constructor Injection vs Setter Injection: Sự khác biệt và so sánh

Khi độ phân giải phụ thuộc được thực hiện bởi một tác nhân bên ngoài chứ không phải chính lớp đó, thì nó được gọi là tiêm phụ thuộc.

Có hai cách tiêm phụ thuộc tiêu chuẩn đang được hỗ trợ trong khung công tác Spring, thông qua đối số hàm tạo hoặc thông qua sử dụng phương thức setter.

Loại tiêm phụ thuộc trước đây được gọi là constructor injection, và cái sau được gọi là setter injection. Cả hai phương pháp được sử dụng cho các mục đích khác nhau và có ưu và nhược điểm riêng.

Chìa khóa chính

  1. Constructor injection đảm bảo việc tạo đối tượng hoàn chỉnh với tất cả các phụ thuộc; setter injection cho phép tạo một phần đối tượng.
  2. Constructor injection thúc đẩy tính bất biến; setter injection cho phép các đối tượng có thể thay đổi.
  3. Constructor injection ngăn chặn sự phụ thuộc vòng tròn; tiêm setter có thể dẫn đến phụ thuộc vòng tròn.

Tiêm Constructor so với Tiêm Setter 

Trình xây dựng tiêm là một loại tiêm phụ thuộc trong khung công tác mùa xuân sử dụng một hàm tạo để tiêm phụ thuộc. Tiêm setter là một loại tiêm phụ thuộc trong khung công tác mùa xuân sử dụng các phương thức setter để tiêm phụ thuộc. Nó có thể tiêm phụ thuộc một phần và linh hoạt hơn.

Tiêm Constructor so với Tiêm Setter

Trình xây dựng tiêm là một loại tiêm phụ thuộc trong khung công tác mùa xuân sử dụng một hàm tạo để tiêm phụ thuộc. Các phụ thuộc được yêu cầu cho bất kỳ lớp nào được chỉ định làm tham số của hàm tạo của lớp cụ thể đó.

Trình xây dựng tiêm không cho phép nhà phát triển xây dựng bất kỳ đối tượng nào trừ khi tất cả các phụ thuộc đã sẵn sàng và do đó, nó đảm bảo việc tiêm phụ thuộc thành công.

Setter injection là một loại dependency injection trong spring framework sử dụng các phương thức setter để inject phụ thuộc. Nó có các phương thức setter có dạng set XYZ(), trong đó XYZ biểu thị một phụ thuộc đưa các đối tượng phụ thuộc vào máy khách.

Cách giải quyết sự phụ thuộc này rất phổ biến trong Spring framework.

Bảng so sánh

Các thông số so sánhXây dựng tiêmThuốc tiêm Setter 
phụ thuộc tiêmNó sử dụng một hàm tạo.Nó sử dụng các phương thức setter.
Dễ đọcNó không thể đọc được nhiều so với setter.Nó là dễ đọc hơn.
Ghi đè thuộc tínhKhông thể ghi đè phụ thuộc.Có thể ghi đè các phụ thuộc nhất định.
Những thay đổiNó luôn tạo một phiên bản bean mới.Nó không tạo bất kỳ thể hiện bean mới nào.
Bất biếnNó hỗ trợ tính bất biến.Nó không hỗ trợ.

Tiêm Constructor là gì?

Constructor injection là một trong những cách tiêu chuẩn để giải quyết sự phụ thuộc trong khung công tác Spring, định nghĩa tĩnh danh sách các phần phụ thuộc cần thiết cho các lớp bằng cách gán chúng làm tham số cho hàm tạo của lớp.

Cũng đọc:  Hiệu quả so với Hiệu quả: Sự khác biệt và So sánh

Tất cả các lớp yêu cầu sự phụ thuộc phải có một hàm tạo công khai bên trong chúng, lấy một thể hiện làm đối số hàm tạo và hàm tạo đó nhất thiết phải là hàm tạo công khai duy nhất bên trong lớp đó.

Nếu cần nhiều hơn một phụ thuộc, thì các đối số bổ sung sẽ được thêm vào cùng một hàm tạo. Cần tuân theo nguyên tắc trách nhiệm duy nhất để đảm bảo rằng sự phụ thuộc được đưa vào hoàn toàn, trong đó nêu rõ rằng các thành viên chỉ nên làm một việc.

Hàm tạo nên được giữ không có bất kỳ logic nào khác để làm cho hàm tạo của các lớp nhanh hơn và đáng tin cậy hơn.

Một thực tế quan trọng của việc đưa vào hàm tạo là các đối tượng sẽ không được xây dựng trừ khi tất cả các phụ thuộc đã sẵn sàng. Vì nó tạo ra các thể hiện mới mỗi khi hàm tạo được gọi, do đó, không thể ghi đè trong đó.

Việc xây dựng nội dung về cơ bản được sử dụng trong trường hợp cần tạo các đối tượng có tất cả các phần phụ thuộc. Đây là cách dễ áp ​​dụng nhất và dễ dàng nhất để triển khai các phần phụ thuộc một cách chính xác.

tiêm chất xây dựng

Tiêm Setter là gì?

Setter injection là một trong những cách tiêu chuẩn để giải quyết sự phụ thuộc trong khung công tác Spring, sử dụng các phương thức setter để giải quyết các phần phụ thuộc. Các phương thức setter có dạng set XYZ(), trong đó XYZ chỉ định phần phụ thuộc cần được đưa vào.

Trong loại phương thức tiêm này, trước tiên, đối tượng được tạo và sau đó, phần phụ thuộc được đưa vào. Để cấu hình Spring, XML tập tin được sử dụng; do đó, khả năng đọc là một mối quan tâm lớn.

Vì các phương thức setter có một dạng tên phương thức được chỉ định, nên nó nâng cao khả năng đọc theo nhiều cách. Khi cần tiêm một số lượng phụ thuộc lớn hơn thì kiểu tiêm setter rất được ưa chuộng và ưa chuộng hơn các loại phương pháp tiêm khác.

Ngoài ra, bằng cách sử dụng setter injection, các nhà phát triển có thể dễ dàng ghi đè và thay đổi các giá trị vì nó không tạo một phiên bản bean mới mỗi lần. Hạn chế duy nhất của setter injection là nó không đảm bảo việc tiêm phụ thuộc hoàn toàn.

Cũng đọc:  Orbitals vs Sublevels: Sự khác biệt và so sánh

Không có gì đảm bảo liệu một đối tượng nhất định có được tiêm phụ thuộc hay không. Nói cách khác, điều đó có nghĩa là có thể có một đối tượng phụ thuộc không đầy đủ. Setter injection là cách linh hoạt nhất và phổ biến nhất để thực hiện tiêm phụ thuộc.

tiêm setter

Sự khác biệt chính giữa Constructor Injection và Setter Injection 

  1. Khi tiêm hàm tạo được sử dụng để tiêm phụ thuộc, nó được thực hiện bằng cách sử dụng một hàm tạo trên bất kỳ bean nào do Spring quản lý, trong khi tiêm Setter sử dụng các phương thức setter như set dependency() với mục đích tiêm phụ thuộc vào bất kỳ bean nào được quản lý bởi vùng chứa IOC của Spring.
  2. Setter injection dễ đọc hơn so với constructor injection vì phương thức setter luôn có tên bắt đầu bằng từ set như setXYZ(), và do đó, rất dễ đọc trong Spring XML config và diễn giải phần phụ thuộc đang được đặt trong khi quá trình tiêm Trình xây dựng sử dụng một chỉ mục cho mục đích đưa phần phụ thuộc vào.
  3. Một số phụ thuộc nhất định có thể được ghi đè bằng cách sử dụng phép nội xạ setter, trong khi điều này là không thể bằng cách sử dụng phép nội xạ của hàm tạo vì mỗi khi một đối tượng mới được tạo khi hàm tạo được gọi.
  4. Bằng cách sử dụng phép nội xạ setter, giá trị có thể dễ dàng được thay đổi vì nó không tạo ra bất kỳ thể hiện bean mới nào, trong khi đó không phải là trường hợp khi sử dụng phép nội xạ hàm tạo vì nó luôn tạo ra một thể hiện bean mới.
  5. Trình xây dựng tiêm hỗ trợ tính bất biến, trong khi mặt khác, tiêm setter, không hỗ trợ tính bất biến.
dự án
  1. https://digitalcommons.calpoly.edu/csse_fac/34/
  2. https://books.google.com/books?hl=en&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE

Cập nhật lần cuối: ngày 19 tháng 2023 năm XNUMX

chấm 1
Một yêu cầu?

Tôi đã nỗ lực rất nhiều để viết bài đăng trên blog này nhằm cung cấp giá trị cho bạn. Nó sẽ rất hữu ích cho tôi, nếu bạn cân nhắc chia sẻ nó trên mạng xã hội hoặc với bạn bè/gia đình của bạn. CHIA SẺ LÀ ♥️

suy nghĩ 25 trên "Constructor tiêm và Setter tiêm: Sự khác biệt và so sánh"

  1. Phần giải thích về hàm tạo và hàm cài đặt nêu bật tầm quan trọng của việc quản lý đúng cách các phần phụ thuộc của đối tượng để phát triển phần mềm mạnh mẽ và có thể bảo trì.

    đáp lại
  2. Thông tin chi tiết về việc chèn hàm tạo và setter cung cấp cho các nhà phát triển sự hiểu biết sâu sắc về cách quản lý các phần phụ thuộc một cách hiệu quả trong các ứng dụng khung Spring.

    đáp lại
    • Đúng rồi, Rogers Natasha. Hiểu được sự phức tạp của các phương pháp chèn phần phụ thuộc là rất quan trọng để duy trì các cơ sở mã sạch và có thể mở rộng.

      đáp lại
  3. Thật thú vị khi hàm tạo và hàm setter đưa ra các mức hỗ trợ khác nhau cho tính bất biến và sự phụ thuộc tuần hoàn, ảnh hưởng đến thiết kế và hành vi của ứng dụng.

    đáp lại
    • Chắc chắn rồi, Christian13. Khả năng phụ thuộc vòng tròn và tính bất biến của đối tượng phải được cân nhắc trọng tâm khi chọn phương pháp chèn phụ thuộc.

      đáp lại
    • Tôi không thể đồng ý hơn được, Christian13. Ý nghĩa của những khác biệt này đối với kiến ​​trúc hệ thống tổng thể là rất đáng kể và phải được xem xét cẩn thận.

      đáp lại
  4. Bảng so sánh cung cấp thông tin tổng quan ngắn gọn về ưu và nhược điểm của hàm tạo và hàm chèn setter, giúp bạn dễ dàng quyết định nên sử dụng hàm nào trong các ngữ cảnh khác nhau.

    đáp lại
    • Chắc chắn rồi, Amorris. Điều cần thiết là phải cân nhắc sự đánh đổi giữa tính bất biến, khả năng đọc và tính hoàn chỉnh của việc tạo đối tượng khi chọn phương pháp chèn.

      đáp lại
    • Tôi đánh giá cao sự so sánh chi tiết. Nó giúp các nhà phát triển đưa ra quyết định sáng suốt dựa trên các yêu cầu cụ thể của ứng dụng.

      đáp lại
  5. Những giải thích chuyên sâu về hàm tạo và hàm chèn setter cung cấp những hiểu biết có giá trị về sự khác biệt và trường hợp sử dụng của từng phương pháp.

    đáp lại
    • Nói hay lắm, Darren. Hiểu các khái niệm cơ bản và ý nghĩa của phương pháp chèn phần phụ thuộc là điều quan trọng đối với các nhà phát triển để xây dựng các hệ thống mạnh mẽ và có thể bảo trì.

      đáp lại
  6. Phần giải thích chi tiết về hàm tạo và hàm setter đã làm sáng tỏ sự cân bằng giữa tính hoàn thiện của việc tạo đối tượng và tính linh hoạt trong việc quản lý các phần phụ thuộc.

    đáp lại
    • Chắc chắn rồi, Eden60. Cân bằng giữa tính hoàn chỉnh và tính linh hoạt trong việc chèn phụ thuộc là rất quan trọng để phát triển các ứng dụng phần mềm có thể mở rộng và bảo trì.

      đáp lại
    • Tóm tắt hay đấy, Eden60. Hiểu được những sự cân bằng này là điều cần thiết để đưa ra quyết định sáng suốt về thiết kế và kiến ​​trúc của hệ thống phần mềm.

      đáp lại
  7. Việc so sánh giữa việc chèn hàm tạo và hàm setter cung cấp cho các nhà phát triển sự hiểu biết rõ ràng về ý nghĩa của từng phương pháp đối với thiết kế và hành vi tổng thể của ứng dụng.

    đáp lại
    • Nói hay đấy, Chạy trốn. Hiểu được ý nghĩa của các phương pháp chèn phụ thuộc khác nhau là rất quan trọng để phát triển các giải pháp phần mềm mạnh mẽ và có thể bảo trì.

      đáp lại
  8. Việc so sánh việc chèn hàm tạo và hàm setter cho thấy rõ rằng cả hai phương pháp đều có những ưu điểm và ý nghĩa riêng biệt đối với thiết kế và hành vi tổng thể của ứng dụng.

    đáp lại
    • Chắc chắn rồi, Qrogers. Điều cần thiết là phải đánh giá các yêu cầu cụ thể và ý nghĩa của từng phương pháp tiêm để đưa ra quyết định thiết kế sáng suốt.

      đáp lại
  9. Những giải thích chuyên sâu về hàm tạo và hàm chèn setter cung cấp cho nhà phát triển những hiểu biết có giá trị về cách thiết kế và quản lý các phần phụ thuộc phức tạp một cách hiệu quả.

    đáp lại
    • Nói hay lắm, Archie30. Hiểu biết thấu đáo về các phương pháp chèn phụ thuộc là rất quan trọng để thiết kế kiến ​​trúc phần mềm mạnh mẽ và có thể bảo trì.

      đáp lại
  10. Lời giải thích tuyệt vời! Cả hai phương pháp chèn phụ thuộc đều có những ưu điểm và nhược điểm cần được xem xét cẩn thận trong từng dự án.

    đáp lại
    • Tôi đồng ý, Ava. Việc chèn hàm tạo là một lựa chọn tuyệt vời khi cần đảm bảo việc tạo đối tượng hoàn chỉnh với tất cả các phần phụ thuộc, trong khi việc chèn setter linh hoạt hơn nhưng không đảm bảo việc chèn phần phụ thuộc hoàn toàn.

      đáp lại
    • Cảm ơn bạn đã giải thích rõ ràng. Điều quan trọng là phải đánh giá các nhu cầu cụ thể của dự án để xác định phương pháp chèn phần phụ thuộc phù hợp nhất.

      đáp lại

Để lại một bình luận

Bạn muốn lưu bài viết này cho sau này? Nhấp vào trái tim ở góc dưới cùng bên phải để lưu vào hộp bài viết của riêng bạn!