Оё имкон дорад, ки такяҳоро на танҳо тавассути конструктор ворид кард?
sobes.tech AI
Ҷавоб аз AI
Бале, мумкин. Конструктор асосидаги боғлиқликларни инъексия қилишдан ташқари, 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): Боғлиқликлар тўғридан-тўғри синфнинг қўлланмаларига аннотациялар (масалан,
@Autowired) ёрдамида инъексия қилинади. Бу усул энг кенг тарқалган, аммо ўз камчиликлари бор (масалан, бирлик тестларида қийинчилик ва яширин боғлиқликлар).public class MyClass { @Autowired private Dependency dependency; // ... бошқа методлар } -
Методлар орқали инъексия (Method-based dependency injection): Камроқ тарқалган, бу усулда боғлиқликлар ҳар қандай
@Autowiredбилан белгиланган метод орқали инъексия қилинади.public class MyClass { private Dependency dependency; @Autowired public void configure(Dependency dependency) { this.dependency = dependency; } // ... бошқа методлар }
Усулни танлаш аниқ ҳолатга ва афзалликларга боғлиқ. Конструктор орқали инъексия одатда афзал ҳисобланади, чунки у объектни барча зарур боғлиқликлар билан яратишга кафолат беради ва тестлашни осонлаштиради. Аммо, қўлланмалар ёки сеттерлар орқали инъексия, опционал боғлиқликлар ёки legacy-код билан ишлашда қулайроқ бўлиши мумкин.