Կարո՞ղ է կախվածությունները ներդնել միայն կոնստրուկտորով։
sobes.tech AI
Պատասխան AI-ից
Այո, դա հնարավոր է: Բացի կոնստրուկտորային կախվածության մուտքագրման (Constructor-based dependency injection), Spring Framework-ում կան հետևյալ հիմնական մեթոդները:
-
Setter-ով մուտքագում (Setter-based dependency injection): Կախվածությունները մուտքագրվում են հանրային setter մեթոդների միջոցով:
public class MyClass { private Dependency dependency; public void setDependency(Dependency dependency) { this.dependency = dependency; } // ... այլ մեթոդներ } -
Քանի որ մուտքագում (Field-based dependency injection): Կախվածությունները անմիջապես մուտքագրվում են դասի դաշտեր՝ annotations (օրինակ,
@Autowired) օգտագործելով: Այս մեթոդը ամենատարածվածն է, բայց ունի իր թերությունները (օրինակ, միավորային թեստավորման դժվարություններ և թաքնված կախվածություններ):public class MyClass { @Autowired private Dependency dependency; // ... այլ մեթոդներ } -
Մեթոդների միջոցով մուտքագում (Method-based dependency injection): Փոքր տարածված, երբ կախվածությունները մուտքագրվում են ցանկացած մեթոդով, որը նշված է համապատասխան annotations-ով (
@Autowired):public class MyClass { private Dependency dependency; @Autowired public void configure(Dependency dependency) { this.dependency = dependency; } // ... այլ մեթոդներ }
Մեթոդի ընտրությունը կախված է կոնկրետ իրավիճակից և նախընտրություններից: Կոնստրուկտորային մուտքագումը սովորաբար համարվում է նախընտրելի, քանի որ այն ապահովում է, որ օբյեկտը ստեղծվի բոլոր անհրաժեշտ կախվածություններով և հեշտացնում է թեստավորումը: Սակայն, դաշտերի կամ setter-ների միջոցով մուտքագումը կարող է ավելի հարմար լինել ընտրովի կախվածությունների կամ legacy կոդի հետ աշխատելու համար: