Ի՞նչ տեսակի կախվածության ներմուծում եք գիտակցում։
sobes.tech AI
Պատասխան AI-ից
Կան երեք հիմնական տեսակ:
-
Մուտքագրում դաշտով (Field Injection): Զависությունը ուղղակիորեն մուտքագրվում է դասի դաշտը՝ օգտագործելով նշում (օրինակ,
@AutowiredSpring-ում): Հեշտ է օգտագործել, բայց բարդացնում է մոդուլային թեստավորումը և խախտում է միակ պատասխանատվության սկզբունքը՝ թաքցնելով կախվածությունները:// Դաշտով մուտքագրման օրինակ public class MyService { // Զависությունը ուղղակիորեն մուտքագրվում է դաշտ @Autowired private MyRepository repository; public void doSomething() { repository.getData(); } } -
Մուտքագրում սեթերով (Setter Injection): Զависությունը մուտքագրվում է հանրային սեթեր մեթոդով: Հնարավոր է ընտրովի լինել (չպետք է պարտադիր լինի), հարմար է փոփոխել կախվածությունները ժամանակի ընթացքում (քանի որ հազվադեպ է օգտագործվում): Չստեղծում է պարտադիր կախվածություն՝ օբյեկտի ստեղծման ժամանակ:
// Սեթերով մուտքագրում օրինակ public class MyService { private MyRepository repository; // Զависությունը մուտքագրվում է սեթով @Autowired public void setRepository(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } } -
Կոնստրուկտորով մուտքագրում (Constructor Injection): Զависությունը մուտքագրվում է կոնստրուկտորի արգումենտով: Սա նախընտրելի է, քանի որ ապահովում է պարտադիր կախվածություն (անվան առանց դրա օբյեկտը չի կարող ստեղծվել), հեշտացնում է մոդուլային թեստավորումը (հեշտ է փոխանցել մոկ օբյեկտներ) և պարզորեն հայտարարում է դասի կարիքները: Օբյեկտները անփոփոխ են դարձնում ստեղծելուց հետո, եթե դաշտերը
finalեն:// Կոնստրուկտորով մուտքագրում օրինակ public class MyService { private final MyRepository repository; // Դաշտը կարող է լինել `final` // Զависությունը մուտքագրվում է կոնստրուկտորով @Autowired // Նոր տարբերակներում Spring-ը կարող է անտեսել @Autowired նշումը միայն կոնստրուկտորի համար public MyService(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } }
Համեմատական աղյուսակ:
| Տեսակ մուտքագրում | Զависության պարտադիրություն | Օգտագործման պարզություն | Թեստավորելիություն | Անփոփոխություն |
|---|---|---|---|---|
| Դաշտով | Ընտրովի (թաքնված) | Բարձր | Նվազ | Ոչ |
| Սեթերով | Ընտրովի | Միջին | Միջին | Ոչ |
| Կոնստրուկտորով | Պարտադիր | Միջին | Բարձր | Մնարական |
Ամենայն դեպքերում խորհուրդ է տրվում օգտագործել կոնստրուկտորով մուտքագրում։