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:
-
İ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.
- Konfiqurasiya: XML, annotasiyalar (
- Spring konteyneri (ən çox yaygın olanı -
-
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.
-
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.
- Tranzaksiya idarəetməsi (
- 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:
-
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.
-
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ı.
- Classpath-də annotasiyalara (
- Geniş istifadə olunur:
-
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ı (postProcessBeforeInitializationmetodu).@PostConstructvə yaafterPropertiesSet-in icrası.@Beanvə ya XML-də göstərilən başlanğıc metodunun icrası.- Bean-in istifadəsi.
BeanPostProcessor-in icrası (postProcessAfterInitializationmetodu).@PreDestroyvə yadestroyableBean-in icrası.@Beanvə ya XML-də göstərilən məhv metodunun icrası.
- Spring konteyneri bean-in həyat dövrünü idarə edir, bunlar daxildir:
// 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.