**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
--------------

| Versiya | Sana | Izohlar |
| --- | --- | --- |
| 0,9 | 2003 yil |  |
| 1.0 | 2004-yil 24 mart | Birinchi ishlab chiqalgan nashr. |
| 2.0 | 2006 yil |  |
| 3.0 | 2009 yil |  |
| 4.0 | 2013 yil |  |
| 5.0 | 2017 yil |  |
| 6.0 | 2022-yil 16 Noyabr |  |
|

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 ob’ekt 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 ob’ektlarining 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 ob’ektlarini 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 ob’ektlarini 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 ob’ektlarini 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 ob’ektlarini sozlash va boshqarishning izchil vositalarini taʼminlaydi. Konteyner muayyan ob’ektlarning ob’ekt hayotiy davrlarini boshqarish uchun javobgardir: bu ob’ektlarni yaratish, ularni ishga tushirish usullarini chaqirish va ularni bir-biriga ulash orqali ushbu ob’ektlarni sozlash.

Konteyner tomonidan yaratilgan ob’ektlar, shuningdek, boshqariladigan ob’ektlar 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.

Ob’ektlarni qaramlikni qidirish yoki qaramlikni inʼektsiya qilish orqali olish mumkin. Tobelikni qidirish — bu qoʻngʻiroq qiluvchining konteyner ob’ektidan maʼlum bir nomli yoki maʼlum turdagi ob’ektni soʻrashi namunasidir. Bogʻliqlik inʼektsiyasi — konteyner konstruktorlar, xususiyatlar yoki zavod usullari orqali ob’ektlarni nomi bilan boshqa ob’ektlarga 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 ob’ektni 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 ob’ektlarda 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 ob’ekt 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.

```
<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 ob’ektida 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 (Andoza:CVE)shunga oʻxshash „Spring4Shell" deb nomlanganLog4Shell.

Yana qarang
-----------

* <a href="https://en.wikipedia.org/wiki/Apache\_Tapestry" rel="mw:ExtLink" title="Apache Tapestry" class="cx-link" data-linkid="468">Apache Tapestry</a>
* <a href="https://en.wikipedia.org/wiki/Google\_Guice" rel="mw:ExtLink" title="Google Guice" class="cx-link" data-linkid="470">Google Guice</a>
* <a href="https://en.wikipedia.org/wiki/Hibernate\_(framework)" rel="mw:ExtLink" title="Hibernate (framework)" class="cx-link" data-linkid="472">Hibernate (framework</a>
* List of Java frameworks
* <a href="https://en.wikipedia.org/wiki/Comparison\_of\_server-side\_web\_frameworks" rel="mw:ExtLink" title="Comparison of server-side web frameworks" class="cx-link" data-linkid="476">Comparison of web frameworks</a>
* <a href="https://en.wikipedia.org/wiki/Spring\_Web\_Flow" rel="mw:ExtLink" title="Spring Web Flow" class="cx-link" data-linkid="478">Spring Web Flow</a>

Maʼlumotnomalar
---------------

1. ↑  „Spring Framework 1.0 Final Released". *Official Spring Framework blog* (24-mart 2014-yil). Qaraldi: 1-mart 2021-yil.
2. ↑  Jolt winners 2006
3. ↑  „JAX Innovation Award Gewinner 2006". 17-avgust 2009-yilda asl nusxadan arxivlandi. Qaraldi: 12-avgust 2009-yil.
4. ↑  „Spring Framework 3.2.5 Released". *Official Spring website* (7-noyabr 2013-yil). Qaraldi: 16-oktabr 2016-yil.
5. ↑  „Announcing Spring Framework 4.0 GA Release".  Spring blog (12-dekabr 2013-yil).
6. ↑  „Spring Boot v1.0.0.RELEASE".  github.com.
7. ↑  „Spring Framework 4.2 goes GA".  Spring Blog (31-iyul 2015-yil).
8. 1 2  „Spring Framework 4.2 goes GA".  Spring Blog.
9. ↑  „Upgrading to Spring Framework 5.x". *github.com*.
10. ↑  „Reactive Spring".  Spring Blog (9-fevral 2016-yil).
11. ↑  „Spring Framework 6.0 goes GA".  Spring Blog (16-noyabr 2022-yil).
12. ↑  Spring Framework documentation for the Core Container
13. ↑  What is the difference between the depencylookup and dependency injection — Spring Forum. Forum.springsource.org (2009-10-28). Retrieved on 2013-11-24.
14. ↑  Spring VS EJB3
15. ↑  
„Pitchfork FAQ". Qaraldi: 6-iyun 2006-yil.
16. ↑  Spring AOP XML Configuration
17. ↑  AspectJ Annotation Configuration
18. ↑  „Spring4Shell: critical vulnerability in Spring - Kaspersky official blog".

Bibliografiya
-------------

Havolalar
---------

* Rasmiy sayti

Andoza:Java (Sun)

|  |  |
| --- | --- |
| Tashqi havolalar Buni Vikimaʼlumotlarda tahrirlash | 
* GND: 7526076-1

 |