Avatar
1
tvd12 Enlightened
tvd12 Enlightened
[Spring]Nên inject bean qua hàm tạo hay qua @Autowired?
Xin chào mọi người ! Gần đây em có ôn lại kiến thức về IOC,DI trong Spring và em có một câu hỏi rất cơ bản muốn hỏi là khi tiêm 1 dependency vào 1 object thì em thấy đa số mọi người thường dùng 2 cách :

Cách 1 : Dùng từ khóa @Autowired ở các thuộc tính.(Cách này được đa số mọi người sử dụng hơn nhưng em có đọc 1 bài viết là sử dụng cách này có vài hạn chế như hình dưới )

Cách 2 : Thêm từ khóa final trước thuộc tính và dùng Lombok để tạo constructor.

Mọi người cho em hỏi là tại sao Cách 1 có hạn chế nhưng nhiều người vẫn sử dụng ạ và nên dùng cách nào ạ thì hay nhất khi đi làm ạ? Em cám ơn!

  • Answer
spring bean
Remain: 5
1 Answer
Avatar
monkey Enlightened
monkey Enlightened
1. Trả lời câu hỏi

Về cơ bản thì cả 2 cách đều như nhau em ạ, tuy nhiên với cách 1 spring tool trên intellij untimate sẽ báo là Field injection is not recommended, mà làm trong dự án thì phải cố gắng bỏ hết được warning và error đi, nên cách 2 sẽ được ưu tiên em ạ.

2. Vì sao Field injection is not recommended?

1 Nếu inject bean qua field thì

  • Nếu tạo hàm setter thì vô tình tạo ra 1 hàm không cần thiết, thậm chí sẽ dẫn đến trường hợp dev khác set nhầm ở một chỗ nào đó
  • Nếu không tạo hàm setter thì khi dùng reflection để set bean vào thì sẽ phải gọi field.setAccessible(true); cái này có thể bắn ra security exception trong các ứng dụng cần bảo mật cao
  1. Một field không được khai báo final sẽ dễ dẫn đến trường hợp bị dev nhầm lẫn set lại ở đâu đó
  • 0
  • Reply