Spring (raamistik)

**Raamistik Spring** (ingl Spring Framework) on tarkvara rakenduse raamistik ja Java platvormi kontroll-konteineri ümberpööramismehhanism. Raamistiku põhifunktsioone saab kasutada ükskõik milline Java-rakendus, kuid Java EE (Enterprise Edition) platvormi peal on laiendused veebirakenduste loomiseks. Kuigi raamistik ei kehtesta mingit konkreetset programmeerimismudelit, on see Java ühiskonnas populaarseks saanud kui lisand või isegi asendus Enterprise JavaBeans-i (EJB) mudelile. Spring on avatud lähtekoodiga tarkvara.

## Versioonide ajalugu

Esimest versiooni kirjutas Rod Johnson, kes avaldas raamistiku oma raamatus "Expert One-on-One J2EE Design and Development" oktoobris 2002. Selle raamistiku esmakordselt avaldati 2003. aasta juunis Apache 2.0 litsentsi alusel. Esimene verstapost, versioon 1.0 lasti välja 2004. aasta märtsis, kusjuures 2004. aasta septembris ja 2005. aasta märtsis avaldati täiendavaid versioone. Spring 1.2.6 raamistik võitis 2006. aastal Jolti auhinna ja JAX (Java API for XML) innovatsiooniauhinna. Spring 2.0 lasti välja 2006. aasta oktoobris, 2007. aasta novembris Spring 2.5, 2009. aasta detsembris Spring 3.0, 2011. aasta detsembris Spring 3.1 ja 2013. aasta novembris Spring 3.2.5. Raamistik Spring 4.0 ilmus 2013. aasta detsembris. Märkimisväärne täiendus raamistikule Spring 4.0 hõlmas ka Java SE (Standard Edition) 8, Groovy 2, mõningaid Java EE 7 ja WebSocket-i tugiteenuseid.

Raamistik Spring 4.2.0 ilmus 31. juulil 2015 ja sai kohe uuendatud 4.2.1 versioonile, mis ilmus 2015. aasta 1. septembril. See on "ühilduv Java 6, 7 ja 8-ga, keskendudes põhilistele täiustustele ja kaasaegsele veebivõimalustele".

Raamistik Spring 4.3 on avaldatud 10. juunil 2016 ja seda toetatakse kuni 2020. aastani. See on "viimane põlvkond üldises Spring 4 süsteeminõuetes (Java 6+, Servlet 2.5+), [...]".

Spring 5 on ehitatud Reactive Streams'iga ühilduva Reactor Core'i ehitamiseks.

## Moodulid
Raamistik Spring sisaldab mitmeid mooduleid, mis pakuvad erinevaid teenuseid.
* Spring põhikonteiner: Springi baasmoodul, mis pakub konteinereid (BeanFactory ja ApplicationContext).
* Aspektorienteeritud programmeerimine: võimaldab rakendada valdkondadevahelisi probleeme.
* Autentimine ja autoriseerimine: konfigureeritavad turbeprotsessid, mis toetavad Spring Security allprojekti (varem Acegi Security System for Spring) kaudu erinevaid norme, protokolle, tööriistu ja tavasid.
* Konventsioon kui konfiguratsioon: Spring Roo moodulis pakutakse kevadepõhiste rakenduste kiireks rakenduste arendamise lahendusi.
* Andmetele juurdepääs: Java platvormil põhinevate relatsioonandmebaasi süsteemide haldamine, kasutades Java Database Connectivity (JDBC) ja objekti relatiivsete kaardistamisvahendite ning NoSQL-i andmebaasidega.
* Kontroll-konteineri ümberpööramine: rakenduse komponentide konfiguratsioon ja Java-objektide elutsükli haldamine, mis on tehtud peamiselt sõltuvus süstimise (dependency injection) kaudu.
* Sõnumside: sõnumi kuulamisobjektide konfigureeriv registreerimine läbipaistva sõnumi tarbimiseks sõnumijärjestest Java Message Service (JMS) kaudu, standardsete JMS API-ide saatmise parandamine.
* Model-View-Controller: HTTP- ja servleti põhine raamistik, mis võimaldab konsoope veebirakenduste laiendamiseks ja kohandamiseks ning RESTful veebiteenused.
* Tehingute haldamine: ühendab mitu tehingukorralduse API-d ja koordineerib Java-objektide tehinguid.
* Kaughaldus: Java-objektide konfigureeriv kokkupuude ja haldamine kohaliku või serveri konfiguratsiooni JMX (Java Management Extensions) kaudu.
* Testimine: tugiklassid ühikukatsetuste ja integratsioonikatsetuste kirjutamiseks.

## Viited