Wir haben zusammengefasst, wie die Abhängigkeitsinjektion für das Spring Framework eingerichtet wird.
Standardmäßig werden Pakete in derselben Hierarchie wie Pakete in der Klasse mit "@ ComponentScan" gescannt. Wenn Sie andere Klassen scannen möchten, geben Sie den Paketnamen in "scanBasePackage" an.
// @Sie kann auch für zusammengesetzte Anmerkungen wie SpringBootApplication angegeben werden.
@ComponentScan(scanBasePackages={"com.example"})
Definieren Sie das abhängige Objekt als Mitglied von private`` final
und definieren Sie den Konstruktor, der das abhängige Objekt empfängt, als Argument im Konstruktor. Bei Verwendung von Lombok kann dies wie folgt beschrieben werden.
@Component
class ComponentA { ...
@RequiredArgsConstructor
class ClassA {
// @Autowired kann weggelassen werden.
private final ComponentA componentA;
...
Zuvor war es Mainstream, "@ Autowired" für Nicht-Final-Mitglieder oder deren Setter anzugeben.
class ClassA {
@Autowired
private ComponentA componentA;
...
class ClassA {
private ComponentA componentA;
@Autowired
public void setComponentA(ComponentA componenA) {
...
Derzeit wird dies empfohlen, da die Verwendung des Konstruktors die folgenden Vorteile bietet.
Da es sich um einen Java-Standard handelt, ist es einfach, zu einem anderen DI-Container zu wechseln.
@Named //Oder@ManagedBean
class ComponentA { ... }
Geben Sie im Konstruktor (oder Setter) "@ Inject" an. (Setter ist auch akzeptabel.)
@RequiredArgsConstructor(onConstructor=@__(@Inject))
class ClassA {
private final ComponentA componentA;
...
Alternativ können Sie "@ Inject" als Mitglied angeben.
class ClassA {
@Inject
private ComponentA componentA;
...
Recommended Posts