Sobes.tech
Middle

Оё имкон дорад, ки такяҳоро на танҳо тавассути конструктор ворид кард?

sobes.tech AI

Ҷавоб аз AI

Бале, мумкин. Конструктор асосидаги боғлиқликларни инъексия қилишдан ташқари, 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): Боғлиқликлар тўғридан-тўғри синфнинг қўлланмаларига аннотациялар (масалан, @Autowired) ёрдамида инъексия қилинади. Бу усул энг кенг тарқалган, аммо ўз камчиликлари бор (масалан, бирлик тестларида қийинчилик ва яширин боғлиқликлар).

    public class MyClass {
        @Autowired
        private Dependency dependency;
    
        // ... бошқа методлар
    }
    
  3. Методлар орқали инъексия (Method-based dependency injection): Камроқ тарқалган, бу усулда боғлиқликлар ҳар қандай @Autowired билан белгиланган метод орқали инъексия қилинади.

    public class MyClass {
        private Dependency dependency;
    
        @Autowired
        public void configure(Dependency dependency) {
            this.dependency = dependency;
        }
    
        // ... бошқа методлар
    }
    

Усулни танлаш аниқ ҳолатга ва афзалликларга боғлиқ. Конструктор орқали инъексия одатда афзал ҳисобланади, чунки у объектни барча зарур боғлиқликлар билан яратишга кафолат беради ва тестлашни осонлаштиради. Аммо, қўлланмалар ёки сеттерлар орқали инъексия, опционал боғлиқликлар ёки legacy-код билан ишлашда қулайроқ бўлиши мумкин.