Sobes.tech
Middle

Կարո՞ղ է կախվածությունները ներդնել միայն կոնստրուկտորով։

sobes.tech AI

Պատասխան AI-ից

Այո, դա հնարավոր է: Բացի կոնստրուկտորային կախվածության մուտքագրման (Constructor-based dependency injection), Spring Framework-ում կան հետևյալ հիմնական մեթոդները:

  1. Setter-ով մուտքագում (Setter-based dependency injection): Կախվածությունները մուտքագրվում են հանրային setter մեթոդների միջոցով:

    public class MyClass {
        private Dependency dependency;
    
        public void setDependency(Dependency dependency) {
            this.dependency = dependency;
        }
    
        // ... այլ մեթոդներ
    }
    
  2. Քանի որ մուտքագում (Field-based dependency injection): Կախվածությունները անմիջապես մուտքագրվում են դասի դաշտեր՝ annotations (օրինակ, @Autowired) օգտագործելով: Այս մեթոդը ամենատարածվածն է, բայց ունի իր թերությունները (օրինակ, միավորային թեստավորման դժվարություններ և թաքնված կախվածություններ):

    public class MyClass {
        @Autowired
        private Dependency dependency;
    
        // ... այլ մեթոդներ
    }
    
  3. Մեթոդների միջոցով մուտքագում (Method-based dependency injection): Փոքր տարածված, երբ կախվածությունները մուտքագրվում են ցանկացած մեթոդով, որը նշված է համապատասխան annotations-ով (@Autowired):

    public class MyClass {
        private Dependency dependency;
    
        @Autowired
        public void configure(Dependency dependency) {
            this.dependency = dependency;
        }
    
        // ... այլ մեթոդներ
    }
    

Մեթոդի ընտրությունը կախված է կոնկրետ իրավիճակից և նախընտրություններից: Կոնստրուկտորային մուտքագումը սովորաբար համարվում է նախընտրելի, քանի որ այն ապահովում է, որ օբյեկտը ստեղծվի բոլոր անհրաժեշտ կախվածություններով և հեշտացնում է թեստավորումը: Սակայն, դաշտերի կամ setter-ների միջոցով մուտքագումը կարող է ավելի հարմար լինել ընտրովի կախվածությունների կամ legacy կոդի հետ աշխատելու համար: