Senior
Spring Framework 'oshkora' qanday ishlaydi?
sobes.tech AI
AIdan javob
Spring Framework bir nechta asosiy printsiplar va mexanizmlardan foydalanib ishlaydi:
-
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.
- Sozlash: XML, annotatsiyalar (
- Spring konteyneri (eng keng tarqalgan -
-
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.
-
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.
- Tranzaksiya boshqaruvi (
- Spring API-lar ustidan yuqori darajadagi abstraktsiyalarni taqdim etadi, bu dasturlashni soddalashtiradi. Misollar:
-
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.
-
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.
- Classpathni skanerlaydi, anotatsiyalar bilan belgilangan sinflarni (
- Keng qo'llaniladi:
-
Beanning hayot aylanishi:
- Spring konteyneri beanning hayot aylanishini boshqaradi, bu quyidagilarni o'z ichiga oladi:
- Nusxa yaratish.
- Bog'liqlikni injektsiya qilish.
BeanNameAware,BeanFactoryAware,ApplicationContextAwareni bajarish.BeanPostProcessorni bajarish (postProcessBeforeInitializationmetodi).@PostConstructyokiafterPropertiesSetni bajarish.@Beanyoki XML da ko'rsatilgan boshlash metodini bajarish.- Bean dan foydalanish.
BeanPostProcessorni bajarish (postProcessAfterInitializationmetodi).@PreDestroyyokidestroyableBeanni bajarish.- O'chirish metodini bajarish (
@Beanyoki XML da ko'rsatilgan).
- Spring konteyneri beanning hayot aylanishini boshqaradi, bu quyidagilarni o'z ichiga oladi:
// 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.