Sobes.tech
Senior

Spring Framework 'səhm altında necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Spring Framework müxtəlif əsas prinsiplər və mexanizmlərdən istifadə etməklə işləyir:

  1. İnversiya Nəzarəti (Inversion of Control - IoC):

    • Spring konteyneri (ən çox yaygın olanı - ApplicationContext) obyektlərin (beens) həyat dövrünü idarə edir.
    • Obyektlər öz asılılıqlarını özləri yaratmaq əvəzinə, onları elan edir və konteyner onları inject edir (Dependency Injection - DI).
    • Bu, aşağıdakı vasitəsilə həyata keçirilir:
      • Konfiqurasiya: XML, annotasiyalar (@Autowired, @Inject), JavaConfig (@Configuration, @Bean).
      • Refleksiya: Spring sinifləri, annotasiyaları və meta-məlumatları skan edir və bean-ləri və onların asılılıqlarını müəyyən edir.
  2. Aspect-Oriented Programming (AOP):

    • Kəsən məsələləri (məsələn, qeydiyyat, təhlükəsizlik, tranzaksiya idarəetməsi) modulləşdirməyə imkan verir.
    • Bu məsələlər aspectlər şəklində həyata keçirilir və tətbiqin icrasında müxtəlif join point-lara tətbiq oluna bilər.
    • Spring AOP proxy-lər (JDK Dynamic Proxies və ya CGLIB) istifadə edir, metod çağırışlarını ələ keçirir və aspektləri tətbiq edir.
    • Bu, icra zamanı (runtime weaving) həyata keçirilir.
  3. Abstraksiya:

    • Spring aşağı səviyyəli API-lər üzərində yüksək səviyyəli abstraksiyalar təqdim edir və inkişafı sadələşdirir. Nümunələr:
      • Tranzaksiya idarəetməsi (PlatformTransactionManager) müxtəlif implementasiyalar üzərində abstraksiya edir (JTA, JDBC, JPA).
      • Məlumatlara giriş (JDBC, JPA/Hibernate) sadələşdirilmiş şablonlar (JdbcTemplate, JpaTemplate) və istisna idarəetməsi təmin edir.
      • MVC çərçivəsi HTTP sorğularının işlənməsini abstraksiya edir.
  4. Spring Konteyneri (ApplicationContext):

    • Əsas komponent, bean-ləri idarə edir.
    • Sinifləri skan edir, meta-məlumatları oxuyur (konfiqurasiya), yaradır, konfiqurasiya edir və bean-lərin həyat dövrünü idarə edir.
    • Bean təriflərini qeydiyyata alır və bean nümunələrini tələb əsasında və ya işə salınarkən (scope və ləngin başlanğıc daxil olmaqla) yaradır.
    • Dependency Injection həyata keçirir.
    • Lokallaşdırma, hadisələrin yayımı, resursların yüklənməsi kimi xidmətlər təqdim edir.
  5. Refleksiya:

    • Geniş istifadə olunur:
      • Classpath-də annotasiyalara (@Component, @Service, @Repository, @Controller) malik sinifləri skan etmək üçün.
      • Annotasiya meta-məlumatlarını oxumaq üçün (@Autowired, @Value, @Transactional).
      • Bean nümunələri yaratmaq və asılılıqları inject etmək üçün konstruktorlar və metodlar əldə etmək.
      • AOP üçün proxy obyektlərinin dinamik yaradılması.
  6. Bean-in həyat dövrü:

    • Spring konteyneri bean-in həyat dövrünü idarə edir, bunlar daxildir:
      • Nümunənin yaradılması.
      • Asılılıqların inject edilməsi.
      • BeanNameAware, BeanFactoryAware, ApplicationContextAware-in icrası.
      • BeanPostProcessor-in icrası (postProcessBeforeInitialization metodu).
      • @PostConstruct və ya afterPropertiesSet-in icrası.
      • @Bean və ya XML-də göstərilən başlanğıc metodunun icrası.
      • Bean-in istifadəsi.
      • BeanPostProcessor-in icrası (postProcessAfterInitialization metodu).
      • @PreDestroy və ya destroyableBean-in icrası.
      • @Bean və ya XML-də göstərilən məhv metodunun icrası.
// Asılılığı inject etmək üçün @Autowired annotasiyasının istifadəsinə nümunə
@Component // Bean Spring tərəfindən idarə olunur
public class OrderService {

    private final ProductRepository productRepository; // Asılılıq

    @Autowired // Spring burada ProductRepository nümunəsini inject edəcək
    public OrderService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    // ... xidmət metodları
}

// AOP üçün @Aspect annotasiyasının istifadəsinə nümunə
@Aspect // Bu sinif aspektdir
@Component
public class LoggingAspect {

    // Join point: com.example.service paketindəki hər hansı sinifin hər hansı metodunun icrası
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void serviceLayer() {}

    // Məsləhət: serviceLayer join point-də metod icrasından əvvəl
    @Before("serviceLayer()")
    public void logMethodCall(JoinPoint joinPoint) {
        System.out.println("Metod çağırılır: " + joinPoint.getSignature().getName());
    }
}

Spring, IoC, DI və AOP istifadə edərək modulyarlıq, test ediləbilərlik və kodun saxlanmasını asanlaşdıran struktur və icraatı idarə edən çərçivə kimi fəaliyyət göstərir. Bu, Java EE və digər texnologiyaların çoxsaylı mürəkkəbliklərini abstraksiya edir.