Spring Framework

**Spring Framework** — bu Java platformasi uchun dastur tizimi va boshqaruv konteynerining inversiyasi. Ramkaning asosiy xususiyatlaridan har qanday Java ilovasi foydalanishi mumkin, ammo Java EE (Enterprise Edition) platformasida veb-ilovalarni yaratish uchun kengaytmalar mavjud. Garchi ramka (Framework) hech qanday maxsus dasturlash modelini yuklamasa ham, u Java hamjamiyatida Enterprise JavaBeans (EJB) modeliga qoʻshimcha sifatida mashhur boʻldi. Spring Framework ochiq manba hisoblanadi.

## Versiya tarixi

Birinchi versiyani Rod Jonson yozgan boʻlib, u 2002-yil oktyabr oyida oʻzining ***"Expert One-on-One J2EE Design and Development"*** kitobini nashr qilish bilan asos solgan. Ramka (Framework) birinchi marta 2003-yil iyun oyida Apache 2.0 litsenziyasi ostida chiqarilgan. Birinchi ishlab chiqarish relizi, 1.0, 2004-yil mart oyida chiqarilgan Spring 1.2.6 ramkasi 2006-yilda Jolt unumdorlik mukofoti va JAX Innovation Award mukofotiga sazovor boʻldi Spring 2.0 2006-yil oktyabr oyida, Spring 2.5 2007-yil noyabrda, Spring 3.0 2009-yil dekabrda, Spring 3.1-dekabr 2011-yilda va Spring 3.2.5 2013-yil noyabrda chiqdi Spring Framework 4.0 2013-yil dekabr oyida chiqarilgan Spring 4.0-dagi sezilarli yaxshilanishlar Java SE (Standard Edition) 8, Groovy 2, Java EE 7 va WebSocket ning baʼzi jihatlarini qoʻllab-quvvatlashni oʻz ichiga oladi.

Spring Boot 1.0 2014-yil aprel oyida chiqarilgan

Spring Framework 4.2.0 2015-yil 31-iyulda chiqarildi va darhol 2015-yil 01-sentabrda chiqarilgan 4.2.1 versiyasiga yangilandi U *"Java 6, 7 va 8 bilan mos keladi, asosiy takomillashtirish va zamonaviy veb imkoniyatlariga eʼtibor qaratadi"* .

Spring Framework 4.3 2016-yil 10-iyunda chiqarilgan va 2020-yilgacha qoʻllab-quvvatlanadi U *"umumiy Spring 4 tizim talablari doirasida yakuniy avlod boʻladi (Java 6+, Servlet 2.5+), [.* *.* *.* *]"* .

Spring 5 Reactive Streams ga mos keladigan Reactor Core asosida qurilishi eʼlon qilindi.

Spring Framework 6.0 2022-yil 16-noyabrda chiqarildi va Java 17+ bazasi va Servlet 6.0 va JPA kabi yaqinda chiqarilgan Jakarta EE 10 API-lariga eʼtibor qaratgan holda Jakarta EE 9+ (`jakarta` nomlar maydonida) ga koʻchirildi. 3.1.

## Modullar
Spring Framework bir qator xizmatlarni taqdim etadigan bir nechta modullarni oʻz ichiga oladi:

* Spring Core konteyneri: bu Springning asosiy moduli va bahor konteynerlarini (BeanFactory va ApplicationContext) taqdim etadi.
* Aspektga yoʻnaltirilgan dasturlash : oʻzaro bogʻliq muammolarni amalga oshirish imkonini beradi.
* Autentifikatsiya va avtorizatsiya : Spring Security kichik loyihasi (formerly Acegi Security System for Spring) orqali bir qator standartlar, protokollar, vositalar va amaliyotlarni qoʻllab-quvvatlaydigan sozlanishi mumkin boʻlgan xavfsizlik jarayonlari.
* Konfiguratsiya boʻyicha konventsiya : Spring Roo modulida bahorga asoslangan korporativ ilovalar uchun tezkor dasturlarni ishlab chiqish yechimi taklif etiladi
* Maʼlumotlarga kirish : Java maʼlumotlar bazasi ulanishi (JDBC) va obyekt bilan bogʻliq xaritalash vositalari va NoSQL maʼlumotlar bazalari yordamida Java platformasida relyatsion maʼlumotlar bazasini boshqarish tizimlari bilan ishlash
* Boshqaruv konteynerining inversiyasi : dastur komponentlarini konfiguratsiya qilish va Java obyektlarining hayot aylanishini boshqarish, asosan bogʻliqlik kiritish orqali amalga oshiriladi.
* Xabarlar: Java Message Service (JMS) orqali xabarlar navbatlaridan shaffof xabar isteʼmol qilish uchun xabarlarni tinglovchi obyektlarini deklarativ roʻyxatga olish, standart JMS API orqali xabar yuborishni takomillashtirish
* Model-koʻrinish-kontroller : veb-ilovalar va RESTful (vakillik holatini uzatish) veb-xizmatlarini kengaytirish va sozlash uchun ilgaklar bilan taʼminlovchi HTTP va servletga asoslangan ramka.
* Masofaviy kirish tizimi: deklarativ masofaviy protsedura chaqiruvi (RPC) uslubidagi Java obyektlarini Java masofaviy usulni chaqirish (RMI), CORBA (Common Object Request Broker Architecture) va HTTP -ga asoslangan protokollar, shu jumladan veb-xizmatlar (SOAP (Simple Object Access) qoʻllab-quvvatlaydigan tarmoqlar orqali marshalllash. Protokol))
* Tranzaksiyalarni boshqarish : bir nechta tranzaksiyalarni boshqarish API-larini birlashtiradi va Java obyektlari uchun tranzaktsiyalarni muvofiqlashtiradi
* Masofadan boshqarish: Java boshqaruv kengaytmalari (JMX) orqali mahalliy yoki masofaviy konfiguratsiya uchun Java obyektlarini deklarativ taʼsir qilish va boshqarish
* Sinov : birlik testlari va integratsiya testlarini yozish uchun qoʻllab-quvvatlash darslari

### Tekshirish konteynerining inversiyasi (qaramlik kiritish)
Spring Framework-ning markazida uning boshqaruv konteynerining inversiyasi (IoC) joylashgan boʻlib, u aks ettirish yordamida Java obyektlarini sozlash va boshqarishning izchil vositalarini taʼminlaydi. Konteyner muayyan obyektlarning obyekt hayotiy davrlarini boshqarish uchun javobgardir: bu obyektlarni yaratish, ularni ishga tushirish usullarini chaqirish va ularni bir-biriga ulash orqali ushbu obyektlarni sozlash.

Konteyner tomonidan yaratilgan obyektlar, shuningdek, boshqariladigan obyektlar yoki fasol deb ataladi. Konteynerni XML (kengaytirilgan belgilash tili) fayllarini yuklash yoki konfiguratsiya sinflarida maxsus Java izohlarini aniqlash orqali sozlash mumkin. Ushbu maʼlumotlar manbalarida loviya yaratish uchun zarur boʻlgan maʼlumotlarni taqdim etadigan loviya taʼriflari mavjud.

Obyektlarni qaramlikni qidirish yoki qaramlikni inʼektsiya qilish orqali olish mumkin. Tobelikni qidirish — bu qoʻngʻiroq qiluvchining konteyner obyektidan maʼlum bir nomli yoki maʼlum turdagi obyektni soʻrashi namunasidir. Bogʻliqlik inʼektsiyasi — konteyner konstruktorlar, xususiyatlar yoki zavod usullari orqali obyektlarni nomi bilan boshqa obyektlarga oʻtkazadigan namunadir.

Koʻp hollarda Spring Frameworkning boshqa qismlaridan foydalanganda konteynerdan foydalanish shart emas, lekin undan foydalanish dasturni sozlash va sozlashni osonlashtiradi. Spring konteyneri ilovalarni sozlash uchun izchil mexanizmni taqdim etadi va kichik oʻlchamli ilovalardan tortib yirik korporativ ilovalargacha deyarli barcha Java muhitlari bilan integratsiyalashadi.

Konteyner Pitchfork loyihasi orqali qisman mos keladigan EJB (Enterprise JavaBeans) 3.0 konteyneriga aylantirilishi mumkin. Biroz  standartlarga mos kelmasligi uchun Spring Frameworkni tanqid qiladi. Biroq, SpringSource EJB 3 muvofiqligini asosiy maqsad sifatida koʻrmaydi va Spring Framework va konteyner yanada kuchli dasturlash modellarini yaratishga imkon beradi, deb daʼvo qiladi. Dasturchi obyektni toʻgʻridan-toʻgʻri yaratmaydi, lekin uni Spring konfiguratsiya faylida belgilash orqali uni qanday yaratish kerakligini tasvirlaydi. Xuddi shunday xizmatlar va komponentlar bevosita chaqirilmaydi; Buning oʻrniga Spring konfiguratsiya fayli qaysi xizmatlar va komponentlarni chaqirish kerakligini belgilaydi. Ushbu IoC texnik xizmat koʻrsatish va sinovdan oʻtkazish qulayligini oshirish uchun moʻljallangan.

### Aspektga yoʻnaltirilgan dasturlash ramkasi
Spring Framework oʻzining aspektga yoʻnaltirilgan dasturlash (AOP) tizimiga ega boʻlib, u aspektlar boʻyicha oʻzaro bogʻliq muammolarni modullashtiradi. AOPning alohida ramkasini yaratish motivatsiyasi dizayn, amalga oshirish yoki konfiguratsiyada juda murakkabliksiz asosiy AOP xususiyatlarini taʼminlash mumkin boʻlishi kerak degan ishonchdan kelib chiqadi. Spring AOP ramkasi, shuningdek, Spring konteyneridan toʻliq foydalanadi.

Spring AOP ramkasi proksi-server namunasiga asoslangan va ish vaqtida sozlangan. Bu kompilyatsiya bosqichiga yoki yuklash vaqtida toʻquvga boʻlgan ehtiyojni yoʻq qiladi. Boshqa tomondan, ushlash faqat qoʻshilish nuqtasida mavjud obyektlarda umumiy usulni bajarishga imkon beradi.

AspectJ ramkasi bilan solishtirganda, Spring AOP kamroq kuchli, ammo unchalik murakkab emas. Spring 1.2 konteynerdagi AspectJ aspektlarini sozlash uchun yordamni oʻz ichiga oladi. Spring 2.0 AspectJ bilan qoʻshimcha integratsiyani qoʻshdi; masalan, nuqta kesish tili qayta ishlatiladi va Spring AOP-ga asoslangan jihatlar bilan aralashtirilishi mumkin. Bundan tashqari, Spring 2.0 Spring Aspects kutubxonasini qoʻshdi, bu AspectJ-dan AspectJ kompilyatsiya qilish yoki yuklash vaqtida toʻqish orqali deklarativ tranzaktsiyalarni boshqarish va qaramlikni inʼektsiya qilish kabi umumiy Spring xususiyatlarini taklif qilish uchun foydalanadi. SpringSource, shuningdek, Spring Roo va Spring Insight kabi bahorgi boshqa loyihalarda AspectJ AOP-dan foydalanadi, Spring Security shuningdek, AspectJ-ga asoslangan aspektlar kutubxonasini taklif qiladi.

Spring AOP uni Spring Framework ichidagi oʻzaro bogʻliq muammolar bilan ishlashga imkon berish uchun ishlab chiqilgan. Konteyner tomonidan yaratilgan va sozlangan har qanday obyekt Spring AOP yordamida boyitilgan boʻlishi mumkin.

Spring Framework tranzaksiyalarni boshqarish, xavfsizlik, masofaviy kirish va JMX uchun Spring AOP-dan ichki foydalanadi.

Ramkaning 2.0 versiyasidan boshlab, Spring AOP konfiguratsiyasiga ikkita yondashuvni taqdim etadi:

* sxemaga asoslangan yondashuv va
* @AspectJ asosidagi izoh uslubi.

```xml
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:mvc="http://www.springframework.org/schema/mvc" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop" 
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd">
```
Shuningdek, u optimallashtirish va qismlarga ajratish usullari orqali juda yuqori hajmli va yuqori unumdorlikdagi ommaviy ishlarni amalga oshirish imkonini beruvchi ilgʻor texnik xizmatlar va xususiyatlarni taqdim etadi. Spring Batch bir qator ishlarni bajaradi; ish koʻp bosqichlardan iborat boʻlib, har bir qadam OʻQISh-JARAYON-YOZISH vazifasidan yoki bitta operatsiya vazifasidan (vazifalar) iborat.

„OʻQISH-JARAYON-YOZISH“ jarayoni quyidagi bosqichlardan iborat: resursdan maʼlumotlarni „oʻqish“ (vergul bilan ajratilgan qiymatlar (CSV), XML yoki maʼlumotlar bazasi), uni „qayta ishlash“, soʻngra boshqa resurslarga „yozish“ (CSV, XML yoki maʼlumotlar bazasi). Masalan, qadam CSV faylidan maʼlumotlarni oʻqishi, uni qayta ishlashi va maʼlumotlar bazasiga yozishi mumkin. Spring Batch CSV, XML va maʼlumotlar bazasini oʻqish/yozish uchun koʻplab sinflarni taqdim etadi.

„Yagona“ operatsiya vazifasi (topshiriq) uchun bu faqat bitta vazifani bajarishni anglatadi, masalan, qadam boshlanishidan yoki tugallanishidan oldin yoki keyin resurslarni tozalash.

Bosqichlarni ish sifatida ishlatish uchun bir-biriga bogʻlash mumkin.

### Integratsiya tizimi
Spring Integration — bu xabar almashish yoki voqealarga asoslangan arxitekturalar uchun zarur boʻlgan qayta foydalanish mumkin boʻlgan funksiyalarni taʼminlovchi korporativ ilovalar integratsiyasi uchun ramka.

* marshrutizatorlar — shartlar asosida xabarni xabar kanaliga yoʻnaltiradi
* transformatorlar — xabar yukini oʻzgartiradi / oʻzgartiradi / oʻzgartiradi va oʻzgartirilgan foydali yuk bilan yangi xabar yaratadi
* adapterlar — boshqa texnologiyalar va tizimlar (HTTP, AMQP (Kengaytirilgan xabarlar navbati protokoli), JMS (Java xabar xizmati), XMPP (kengaytirilgan xabarlar va mavjudlik protokoli), SMTP (oddiy pochta uzatish protokoli), IMAP (Internet xabarlariga kirish protokoli) bilan integratsiya qilish uchun.), FTP (Fayl uzatish protokoli), shuningdek FTPS / SFTP, fayl tizimlari va boshqalar.)
* filtrlar — mezonlar asosida xabarni filtrlaydi. Agar shartlar bajarilmasa, xabar oʻchiriladi.
* xizmat faollashtiruvchilari — xizmat koʻrsatish obyektida operatsiyani chaqirish
* boshqaruv va audit

Spring Integration quvur va filtrga asoslangan arxitekturani qoʻllab-quvvatlaydi.

## Spring4Shell zaifligi
Boshqa har qanday dasturiy taʼminot boʻlagi singari, Springda ham baʼzi zaifliklar boʻlishi mumkin. Ulardan biri ()shunga oʻxshash „Spring4Shell“ deb nomlanganLog4Shell.

## Yana qarang

* Apache Tapestry
* Google Guice
* Hibernate (framework
* List of Java frameworks
* Comparison of web frameworks
* Spring Web Flow

## Maʼlumotnomalar

## Bibliografiya
 

## Havolalar

*