Spring Boot dependency injection?
private Service service;
@Autowired
public void setService(Service service){
this.service = service;
}
ez a setter tulajdonképpen a meglévő Service Objektumot állitja be az osztályváltozóba?
Tehát nem jön létre új hanem a meglévőt allitja be?
Ja és pontosan az @Autowired annotáció miért kell a setter felé?
Igen, alapból a Spring minden beant singletonként hoz létre, azaz csak egy példányban. De vannak egyéb scope-ok, viszont ezt jelezned kell a Spring felé hogy valamiből többet hozzon létre, pl prototype. Viszont erre nagyon ritkán van szükség.
Illetve a setter injection veszélyes, lehetséges, hogy null-t kapsz ha nem talált olyan típusú beant. Jobb praktika minden függőséget a konstruktorban beinjenktalni.
Az autowired ahhoz kell hogy jelezd a springben, ide köss be nekem egy ilyen típusú beant. Viszont jobb praktika az is, hogy ha újabb verziójú springet használsz hogy minden példányváltozót finalre állítod és csinálsz egy db konstruktort, ami beállítja az összeset. Ebben az esetben el tudod hagyni az autowired annotaciot mert a Spring magától kitalálja, hogy ide bizony te be akarod injectalni a dependency-ket. Csak annotald fel az osztályt service vagy component annotacioval.
Bocsi az írási hibákért.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!