Según die Javadoc für Autowired kann die Anmerkung für "einen Konstruktor, ein Feld, eine Setter-Methode oder eine Konfigurationsmethode" verwendet werden. Siehe die vollständige Dokumentation für weitere Einzelheiten.
Ich persönlich bevorzuge Ihre erste Option (Konstruktorinjektion), weil die myDao
Feld als endgültig markiert werden kann:
@Controller
public class MyControllear {
private final MyDao myDao;
@Autowired
public MyController(MyDao myDao) {
this.myDao = myDao;
}
Die Konstruktorinjektion ermöglicht es Ihnen auch, die Klasse in einem Einheitstest zu testen, ohne dass der Code von Spring abhängt.
Die zweite Option würde besser lauten:
@Controller
public class MyControllear {
@Autowired
private MyDao myDao;
MyController() {
}
Bei der Feldinjektion erstellt Spring das Objekt und aktualisiert dann die für die Injektion markierten Felder.
Eine Option, die Sie nicht erwähnt haben, ist das Anbringen von @Autowired
auf eine Setter-Methode (Setter-Injektion):
@Controller
public class MyControllear {
private MyDao myDao;
MyController() {
}
@Autowired
public void setMyDao(MyDao myDao) {
this.myDao = myDao;
}
Sie müssen sich nicht für das eine oder das andere entscheiden. Sie können Feldinjektion für einige Abhängigkeiten und Konstruktorinjektion für andere Abhängigkeiten desselben Objekts verwenden.