MS Lesson6: IoC, DI, Spring Context, ApplicationContext

 1. IoC - Inversion of Control

Ən əsas ideya budur:
  • Əvvəl (klassik Java): sən obyektləri özün yaradırsan (new Service()new Repo()), kim kimdən asılıdır hamısını özün bağlayırsan.
  • IoC-də: bu nəzarəti container-ə verirsən (Spring). O obyektləri özü yaradır və bağlayır.
Yəni nəzarət istiqaməti çevrilir:
  • əvvəl: sən idarə edirdin
  • indi: framework idarə edir
Buna görə adı “Inversion of Control”.


2. DI - Dependency Injection

DI, IoC-ni praktikada həyata keçirmə üsuludur.
Sənin class-ın başqa class-a ehtiyac duyursa, o dependency-ni içəridə new etmirsən.
Kənardan verilir (inject olunur).
Məsələn:
  • TestController-a StudentIdGeneratorService lazımdır.
  • Constructor ilə veririk:
  • new TestController(service) (unit testdə)
  • və ya Spring onu avtomatik verir (runtime-da)
DI növləri:
  • constructor injection (ən yaxşı)
  • setter injection
  • field injection


3. Spring Context

Spring Context = Spring-in işləyən IoC container-ıdır.
Nə edir?
  • @Component, @Service@Repository@Controller, @Configuration tapır
  • bunlardan bean yaradır
  • DI edir
  • bean lifecycle idarə edir (initdestroy)
  • config/property binding edir
Sadə dillə:
“obyekt fabriki + wiring mərkəzi
Sən @Autowired yazırsansa, onu dolduran məhz context-dir.


4. ApplicationContext

ApplicationContext, Spring context-in konkret interfeysidir.
Praktik olaraq “Spring Context” deyəndə çox vaxt bunu nəzərdə tuturuq.
Texniki olaraq:
  • BeanFactory daha əsas/sadə container API-dir
  • ApplicationContext onun üstündə daha geniş funksionallıq verir:
  • event publishing
  • internationalization
  • AOP/auto-config ilə daha tam inteqrasiya
  • environment/profiles və s.
Spring Boot app başlayanda faktiki bir ApplicationContext qalxır.


  • IoC = prinsip (idarəni framework-ə vermək)
  • DI = mexanizm (dependency-ni inject etmək)
  • ApplicationContext (Spring Context) = bunu edən container


  • Spring Context = ümumi danışıq adıdır.
  • ApplicationContext = bunun real, texniki adıdır (Spring-də ən çox istifadə edilən container interfeysi).
Yəni praktikada çox vaxt eyni şeyi deyirlər.
Sadə analoq:
  • “maşın” deyəndə ümumi addır
  • “Toyota Corolla” deyəndə konkret modeldir
Burda:
  • “Spring Context” = maşın
  • “ApplicationContext” = konkret model (ən çox işlənən)




Applicationda olan butun bean-lari gosterir

@Bean
ApplicationRunner runner(ApplicationContext ctx) {
return args -> {
String[] names = ctx.getBeanDefinitionNames();
Arrays.sort(names);
for (String name : names) {
System.out.println(name);
}
};
}






















Комментарии

Популярные сообщения из этого блога

Interview questions

Lesson1: JDK, JVM, JRE

Lesson_2: Operations in Java