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
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
  • 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