Sobes.tech
Senior

Spring Framework 'oshkora' qanday ishlaydi?

sobes.tech AI

AIdan javob

Spring Framework bir nechta asosiy printsiplar va mexanizmlardan foydalanib ishlaydi:

  1. Boshqaruvning teskari aylanishi (Inversion of Control - IoC):

    • Spring konteyneri (eng keng tarqalgan - ApplicationContext) obyektlarning (beanlarning) hayot aylanishini boshqaradi.
    • Ob'ektlar o'zlarining bog'liqliklarini mustaqil ravishda yaratish o'rniga, ularni e'lon qiladilar va konteyner ularni injektsiya qiladi (Bog'liqlikni injektsiya qilish - DI).
    • Bu quyidagi usullar bilan amalga oshiriladi:
      • Sozlash: XML, annotatsiyalar (@Autowired, @Inject), JavaConfig (@Configuration, @Bean).
      • Refleksiya: Spring sinflarni, annotatsiyalarni va metainformatsiyalarni skanerlash orqali beanlar va ularning bog'liqliklarini aniqlaydi.
  2. Aspektga yo'naltirilgan dasturlash (Aspect-Oriented Programming - AOP):

    • U kesishadigan muammolarni (masalan, loglash, xavfsizlik, tranzaksiya boshqaruvi) modullash imkonini beradi.
    • Bu muammolar aspektlar shaklida amalga oshiriladi va dastur bajarilishining turli kesish nuqtalariga qo'llanilishi mumkin.
    • Spring AOP proxylar (JDK Dynamic Proxies yoki CGLIB) yordamida metod chaqiruvlarini ushlash va aspektlarni qo'llash uchun ishlatiladi.
    • Bu ish vaqtida (runtime weaving) amalga oshiriladi.
  3. Abstraktsiya:

    • Spring API-lar ustidan yuqori darajadagi abstraktsiyalarni taqdim etadi, bu dasturlashni soddalashtiradi. Misollar:
      • Tranzaksiya boshqaruvi (PlatformTransactionManager) turli amalga oshirishlarni (JTA, JDBC, JPA) abstraktsiya qiladi.
      • Ma'lumotlarga kirish (JDBC, JPA/Hibernate) soddalashtirilgan shablonlar (JdbcTemplate, JpaTemplate) va istisnolarni boshqarishni ta'minlaydi.
      • MVC framework HTTP so'rovlarini boshqarishni abstraktsiya qiladi.
  4. Spring konteyneri (ApplicationContext):

    • Asosiy komponent bo'lib, beanlarni boshqaradi.
    • Sinflarni skanerlaydi, metainformatsiyalarni o'qiydi (sozlash), yaratadi, sozlaydi va beanlarning hayot aylanishini boshqaradi.
    • Bean ta'riflarini ro'yxatdan o'tkazadi va bean nusxalarini talab qilinadigan yoki ishga tushirilganda yaratadi (doirasi va kechiktirilgan boshlashga qarab).
    • Bog'liqlikni injektsiya qiladi.
    • Lokalizatsiya, voqealarni nashr qilish, resurslarni yuklash kabi xizmatlarni taqdim etadi.
  5. Refleksiya:

    • Keng qo'llaniladi:
      • Classpathni skanerlaydi, anotatsiyalar bilan belgilangan sinflarni (@Component, @Service, @Repository, @Controller) topadi.
      • Anotatsiyalarning metainformatsiyalarini o'qiydi (@Autowired, @Value, @Transactional).
      • Beanlar uchun konstruktorlar va metodlarni olish va bog'liqliklarni injektsiya qilish.
      • AOP uchun dinamik proxylarni yaratadi.
  6. Beanning hayot aylanishi:

    • Spring konteyneri beanning hayot aylanishini boshqaradi, bu quyidagilarni o'z ichiga oladi:
      • Nusxa yaratish.
      • Bog'liqlikni injektsiya qilish.
      • BeanNameAware, BeanFactoryAware, ApplicationContextAware ni bajarish.
      • BeanPostProcessor ni bajarish (postProcessBeforeInitialization metodi).
      • @PostConstruct yoki afterPropertiesSet ni bajarish.
      • @Bean yoki XML da ko'rsatilgan boshlash metodini bajarish.
      • Bean dan foydalanish.
      • BeanPostProcessor ni bajarish (postProcessAfterInitialization metodi).
      • @PreDestroy yoki destroyableBean ni bajarish.
      • O'chirish metodini bajarish (@Bean yoki XML da ko'rsatilgan).
// Bog'liqlikni injektsiya qilish uchun @Autowired annotatsiyasidan foydalanish misoli
@Component // Spring tomonidan boshqariladigan bean
public class OrderService {

    private final ProductRepository productRepository; // Bog'liqlik

    @Autowired // Spring bu yerga ProductRepository nusxasini injektsiya qiladi
    public OrderService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    // ... xizmat metodlari
}

// AOP uchun @Aspect annotatsiyasidan foydalanish misoli
@Aspect // Bu sinf aspekt
@Component
public class LoggingAspect {

    // Nuqta kesiti: com.example.service paketidagi har qanday sinfning har qanday metodining bajarilishi
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void serviceLayer() {}

    // Maslahat: serviceLayer nuqta kesitida metod bajarilishidan oldin
    @Before("serviceLayer()")
    public void logMethodCall(JoinPoint joinPoint) {
        System.out.println("Metod chaqirildi: " + joinPoint.getSignature().getName());
    }
}

Spring, ilovaning tuzilishi va bajarilishini boshqaradigan ramka sifatida ishlaydi, IoC, DI va AOP yordamida modullik, testlash va kodni saqlashni osonlashtiradi. U Java EE va boshqa texnologiyalarning ko'plab murakkabliklarini abstraktsiya qiladi.