Spring Framework

S Vikipedije, slobodne enciklopedije
Spring java
logo
Originalni nazivengl. Spring
Izgovara seSpring
Modelobjektno-orijentisani
Aktuelna verzija5.3.8
Datum aktuelne verzije26. avgust 2021.
Sistem tipovaApplication framework
LicencaApache License
Veb-sajthttps://spring.io/

Spring Framework je radni okvir za platformu Java koji obezbeđuje infrastrukturu za razvoj aplikacije. Omogućava lakše i brže kreiranje softvera, čistiji kod na javi, a time i lakše održavanje aplikacije. Spring je organizovan u oko 20 modula koje je moguće pojedinačno upotrebljavati zavisno od potreba aplikacije i otvorenog je koda.

Istorija verzija[uredi | uredi izvor]

Verzija Datum
0.9 2003.
1.0 24. mart 2004.
2.0 2006.
3.0 2009.
3.1 2011.
4.0 2013.
4.2 2015.
5.0 2017.
5.3 2020.
5.3.8 2021.

Prvu verziju je napisao Rod Džonson, a predstavio je krajem oktobra 2002. U junu 2003. okvir je prvi put objavljen pod licencom Apache 2.0 license. Prvo izdanje za produkciju (verzija 1.0) objavljeno je u martu 2004. godine.[1] Verzija 1.2.6 osvojila je nagradu za produktivnost Jolt, ali i nagradu za inovaciju godine JAX.[2][3] Verzija 4.0 obuhvata značajna poboljšanja, poput podrške za Java SE 8, Groovy 2, neke aspekte Java EE 7 i WebSocket.

Moduli[uredi | uredi izvor]

Spring Framework je organizovan u oko 20 modula koje je moguće pojedinačno upotrebljavati u zavisnosti od potreba aplikacije.

  • Osnovno skladište (engl. Core container) srž je ovog radnog okvira. Skladište je zaduženo za kreiranje objekata, njihovo povezivanje, konfigurisanje i upravljanje njihovim celokupnim životnim ciklusom od stvaranja do uništenja. Postoje dve vrste skladišta — fabrika semena (engl. BeanFactory) i aplikacioni kontekst (engl. ApplicationContext).[4]
  • Aspektno orijentisano programiranje (engl. Aspect Oriented Programming ili AOP) omogućava implementaciju unakrsnih problema
  • Pristup podacima (engl. Data Access), rad sa sistemima za upravljanje relacionim bazama podataka na platformi Java pomoću Java Database Connectivity (JDBC) i objektno-relacionih alata za mapiranje baza podataka NoSQL.
  • Inverzija kontrolnog kontejnera: konfiguracija aplikativnih komponenti i upravljanje životnim ciklusom objekata na javi.
  • Razmena poruka (engl. Messaging)
  • MVC (engl. Model-view-controller), okvir zasnovan na HTTP-u i u servletu koji pruža funkcionalnost za proširenje i prilagoćavanje veb-aplikacija i RESTful (reprezentativni prenos stanja)
  • Okvir za daljinski pristup: konfiguracioni poziv daljinkse procedure (RPC), koja podrazumeva razvrstavanje stilova objekata preko mreža koje podržavaju pozivanje udaljenih metoda na javi (RMI), COBRA (Arhitektura posrednika zahteva za zajedničke objekte) i protokole zasnovane na HTTP-u, uključujući veb-usluge (SOAP; Protokol za jednostavan pristup objektima).
  • Upravljanje transakcijama: koordinira transakcije za objekte na javi.
  • Daljinsko upravljanje: konfigurativno izlaganje i upravljanje objektima na javi za lokalnu i daljinsku konfiguraciju putem Proširenja upravljanja javom (engl. Java Management Extensions)
  • Testiranje: klase za pisanje jediničnih i integracionih testova.

Inverzija kontrolnog kontejnera[uredi | uredi izvor]

Srž Sping Framework-a je njegov inverzijski kontrolni kontejner (IoC), koji pomoću refleksije pruža dosledan način konfigurisanja i upravljanja objektima na javi. Ova vrsta kontejnera odgovorna je za upravljanje životnim ciklusom određenih objekata. To podrazumeva kreiranje ovih objekata, pozivanje njihovih metoda inicijalizacije i njihovo konfigurisanje.

Objekti koje je kreirao kontejner nazivaju se upravljanim objektima. Kontejner se može konfigurisati učitavanjem XML-a (engl. Extensible Markup Language) ili pomoću posebnih napomena na javi, što podrazumeva njihovo otkrivanje na konfiguracionim klasama. One definišu informacije koje su neophodne za kreiranje upravljanih objekata.

Objekti se mogu dobiti pretraživanjem zavisnosti ili ubacivanjem novih objekata od kojih će zavisiti.[5] Pretraživanje zavisnosti je obrazac gde od objekta kontejnera pozivalac traži objekat s određenim imenom ili određenim tipom. Ubrizgavanje zavisnosti podrazumeva obrazac gde dolazi do razmene objekata, tj. prosleđivanja objekata drugim objektima. Ono se može izvesti pomoću konstruktora, propertija ili fabričkih metoda.

Upotreba kontejnera olakšava konfiguraciju i prilagođavanje aplikacije. Međutim, u mnogim slučajevima nije neophodna upotreba kad se upotrebljavaju drugi delovi Spring Framework-a. Spring-ov kontejner pruža dosledan mehanizam za konfigurisanje aplikacija i integriše se s gotovo svim Java okruženjima, od malih aplikacija do velikih poslovnih aplikacija. Kontejner se može pretvoriti u delimično usklađen EJB-om 3.0 .Programer ne kreira direktno objekat, već opisuje kako bi trebalo biti kreiran, definišući ga u Spring konfiguracijskoj datoteci. Slično tome, usluge i komponente se ne pozivaju direktno; umesto toga Spring konfiguraciona datoteka definiše koje se usluge i komponente moraju pozvati. Cilj tog IoC-a je povećanje jednostavnosti održavanja i testiranja.

Aspektno-orijentisano programiranje[uredi | uredi izvor]

Spring Framework ima sopstveni okvir za aspektno-orijentisano programiranje koji modulira međusektorkse probleme u aspektima.Motivacija za stvaranje zasebnog AOP okvira potiče iz uverenja da bi trebalo omogućiti pružanje osnovnih AOP funkcija bez previše složenosti u dizajnu, implementaciji ili konfiguraciji.Ovaj okvir je zasnovan na proxy pattern i konfiguran je za vreme izvođenja. Ovo dozvoljava sano javno izvršavanje metoda na postojećim objektima na tački spajanja.

U poređenju sa AspectJ okvirom, gore pomenuti spring je manje moćan, ali ujedno i manje komplikovan. Spring 1.2 uključuje podršku za konfigurisanje AspectJ aspekata u kontejneru. Spring 2.0 je dodao još integracija, na primer pointcut se može ponovo koristiti i može se mešati sa aspektima zasnovanim na Spring AOP-u. Zatim, Spring 2.0 je dodao novu aspektnu biblioteku koja koristi AspectJ za pružanje zajedničkih Spring funkcija, kao što su deklarativno upravljanje transakcijama o ubrizgavanje zavisnosti.

Spring AOP je osmišljen tako da može da radi sa unakrsnim problemima unutar Spring Framework-a. Svaki objekat koji je kreiran i konfigurisan u kontejneru može se obogatiti pomoću Spring AOP-a. Spring Framework interno koristi Spring AOP za upravljanje transakcijama, sigurnost, daljinski pristup i JMX.

Od verzije 2.0 okvira, Spring nudi dva pristupa konfiguraciji AOP-a:

  • pristup zasnovan na šemi[6]
  • stil označavanja zasnovan na @AspectJ[7]
<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">

Okvrir za pristup podacima[uredi | uredi izvor]

Modul za pristup i integraciju podataka (Data Access/Integration) jest sloj aplikacije koji služi za upravljanje podacima koji se nalaze u sistemu datoteka ili bazama podataka. Podrška je obezbeđena za sve popularne okvire za pristup podacima u Javi: JDBC, iBatis/MyBatis, Hibernate, Java Data Objects (JDO, ukinuto od 5.h), Java Persistence API (JPA), Oracle TopLink, Apache OJB i Apache Cayenne.

Funkcije koje Spring pruža:

  • Upravljanje resursima - automatsko prikupljanje i oslobađanje resursa baze podataka
  • Rukovanje izuzecima - prevođenje izuzetka koji je povezan sa pristupom podataka
  • Učešće u transakciji - transparentno učešće u tekućim transakcijama
  • Odmotavanje resursa - dohvatanje objekata baze podataka
  • Apstrakcija za rukovanje binarnim velikim objektima (BLOB) i znakovnim velikim objektima (CLOB).

Sve ove funkcije postaju dostupne kada koristite klase šablona koje nudi Spring za svaki podržani okvir.Spring Framevork je jedini okvir dostupan u Javi koji nudi upravljana okruženja za pristup podacima izvan servera aplikacija ili kontejnera.[8]

Upravljanje transakcijama[uredi | uredi izvor]

Springov okvir za upravljanje transakcijama donosi mehanizam apstrakcije na Java platoformi. Njegova transakcija je sposoba za:

  • rad sa lokalnim i globalnim transakcijama ( lokalna trasakcija ne zahteva server aplikacije)
  • rad sa umetnutim transakcijama
  • rad sa tačkama čuvanja
  • radi u gotovo svim okruženjima Java platforme

Java Transaction API (JTA) podržava samo ugnježđene transakcije i globalne transakcije i zahteva server aplikacija (a u nekim slučajevima i primenu aplikacija na serveru aplikacija).

Okvir pruža dva načina dodavanja upravljanja transakcijama:

  • programski
  • konfigurativno

Model-pogled-kontroler[uredi | uredi izvor]

Model-pogled-kontroler predstavnja okvir za veb aplikacije, koji prvobitno nije bio planiran. Springovi programeri su odlučili da napišu sopstveni veb okvir kao reakciju na ono što su tada smatrali lošim dizajnom dostupnih okvira.[9] Posebno su smatrali da postoji nedovoljno razdvajanje između slojeva za prezentaciju i rukovanje zahtevima, i između sloja za rukovanje zahtevima modela.[10]

Spring je okvir zasnovan na zahtevima. Okvir definiše strateške interfejse za sve.odgovornosti sa kojima mora da se nosi savremeni okvir zasnovan na zahtevima. Cilj svakog intefejsa je da bude jednostavan i jasan kako bi svi korisnici mogli da napišu sopstvene implementacije. MVC otvara put za čistiji kod. Svi interfejsi su čvrsto vezani za Servlet API.

Najvažniji interfejsi koje definiše Spring MVC i njihove odgovornosti navedeni su u nastavku:

  • Kontroler: dolazi između modela i prikaza radi upravljanja dolaznim zahtevima i preusmeravanja na odgovarajući odgovor. Kontroler će preslikati HTTP zahtev u odgovarajuće metode. Prebacuje se sa prelaska na model ili prikaz.
  • HandlerAdapter: izvršavanje objekata koji obrađuju dolazne zahteve
  • LocaleResolver: služi za određivanje lokalizacije(jezika) na osnovu sesije, kolačića, ili samog HTTP zahteva
  • MultipartResolver: koristi se kod otpremanja datoteka, pomaže kontroleru da dobije fajl i obradi ga na odgovarajući način
  • ViewResolver: određuje koji je format odgovora klijentu, na osnovu imena klijenta
  • View: odgovoran za vraćanje odgovora klijentu. Neki zahtevi se mogu pogledati direktno bez odlaska na deo modela; drugi mogu proći kroz sve tri.

Svaki gore navedeni interfejs ima važnu odgovornost u ukupnom okviru. Spring MVC se isporučuje sa implementacijama svih ovih interfejsa i zajedno nudi skup funkcija na vrhu Servlet API . Međutim, programeri mogu slobodno pisati druge implementacije. Prednost visokog nivoa apstrakcije koju nudi Spring MVC jest jednostavnost testiranja implementacija tih interfejsa.

Tok rada Spring MVC[uredi | uredi izvor]

Kada korisnik klikne na vezu ili pošalje obrazac svom veb pregledaču, zahtev ide na Spring DispatcherServlet. On konsultuje jedno ili više mapiranja, izabran je kao odgovarajući kontrolor i prosleđuje zahtev. Kontroler obrađuje određeni zahtev i generiše rezultat. Ove informacije je potrebno formatirati u html- u ili bilo kojoj tehnologiji poput JSP-a. Kada kontroler nije povezan sa određenim prikazom, DispatcherServlet pronalazi stvarni JSP uz pomoć ViewResolver.

Konfiguracija DispatcherServlet-a[uredi | uredi izvor]

Mora biti konfigurisan u web.xml

<servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>MyServlet</servlet-name>
  <url-pattern>/<url-pattern>
</servlet-mapping>

Okvir za upravljanje na daljinu[uredi | uredi izvor]

Okvir za daljinski pristup je apstrakcija za rad sa različitim tehnologijama zasnovanim udaljenim pozivima procedura dostupnim na Java platformi i za povezivanje klijenata i za razvrstavanje objekata na serverima. Najvažnija karakteristika koju nudi ovaj okvir je olakšavanje konfiguracije i upotrebe ovih tehnologija što je više moguće kombinovanjem inverzije kontrole i AOP-a.

Okvir omogućava automatskos ponovno povezivanje nakon prekida veze. Spring pruža podršku za ove protokole i proizvode:

  • protokole zasnovane na HTTP:
    • Hessian: binarni protokol za serijalizaciju, održava se pomoću protokola zasnovanih na CORBA
    • RMI (1): pozivanje metoda koristeći RMI infrastrukturu koja je specifična za Spring
    • RMI (2): pozivanje metoda pomoću RMI interfejsa u skladu sa redovnom upotrebom RMI -ja
    • RMI-IIOP (CORBA): pozivanje metoda pomoću RMI-IIOP (CORBA)
  • SOAP
    • Integracija sa okvirom veb usluga Apache Axis

Apache CXF pruža integraciju sa Spring Framework-om za izvoz objekata u stilu RPC-a na strani servera.

Brzi razvoj aplikacija preko konvencije[uredi | uredi izvor]

Spring Boot[uredi | uredi izvor]

Spring Boot je Springovo rešenje za konfiguraciju preko konvencije za kreiranje samostalnih aplikacija zasnovanih na Springu, koje možete " pokrenuti ".[11]Većini Spring Boot aplikacija je potrebno vrlo malo Spring konfiguracije.

Ključne karakteristike:

  • Kreiranje samostalne Spring aplikacije
  • Ugradnja Tomcat-a ili Jetty direktno (nema potrebe za postavljanjem WAR datoteka )
  • Obezbeđena odlučni "početni" modeli projektnih objekata
  • Automatska konfiguracija Springa kada god je to moguće
  • Omogućene funkcije spremne za proizvodnju, kao što su metrike, proverene ispravnosti i spoljna konfiguracija
  • Apsolutno nema generisanja koda i nema zahteva za XML konfiguraciju.
  • Integracija i podržavanje svih obrazaca integracije preduzeća

Spring Roo[uredi | uredi izvor]

Spring Roo je projekat zajednice koji nudi alternativni pristup zasnovan na generisanju koda pri korišćenju konfiguracije preko konvencije za brzu izradu aplikacija u Javi. Trenutno podržava Spring Security i Spring Web Flow . Razlikuje se od drugih okvira za brzi razvoj aplikacija fokusiranjem na:

  • Proširenje (putem podataka)
  • Produktivnost Java platforme (za razliku od drugih jezika)
  • Izbegavanje zaključavanja
  • Izbegavanje izvršavanja
  • Upotrebljivost (posebno preko funkcija ljuske i načina korišćenja)

Batch okvir[uredi | uredi izvor]

Spring Batch je okvir za paketnu obradu koji pruža funkcije za višekratnu upotrebu koje su neophodne za obradu velikih količina zapis, uključujući:

  • evidentiranje/praćenje
  • upravljanje transakcijama
  • statistika obrade poslova
  • ponovno pokretanje posla

Takođe pruža naprednije tehničke usluge i funkcije koje će omogućiti optimizaciju i tehnike particionisanja serijskih poslova izuzetno velikog obima i visokih performansi. Spring Batch izvršava niz poslova; posao se sastoji od mnogo koraka, a svaki korak se sastoji od zadatka ČITANjE-OBRADA-PISANjE .

Proces „ČITANjE-OBRADA-PISANjE” se sastoji od ovih koraka: „čitanje” podataka iz resursa, „obrada” zatim „upisivanje” u druge resurse. Na primer, mogu se pročitati podatke iz CSV datoteke, zatim obraditi ih, a kasnije i upisati u bazu podataka.

Pojedinačni operativni zadatak predstavlja mogućnost da se radi samo jedan zadatak, kao što je čišćenje resursa pre ili nakon pokretanja. Koraci se mogu povezati zajedno da bi se izvodili kao posao.

Okvir integracije[uredi | uredi izvor]

Spring integracije je okvir koji pruža funkcije za višekratnu upotrebu neophodne za slanje poruka ili arhitekture zasnovane na događajima.

  • ruteri — usmerava poruku do kanala za poruke na osnovu uslova
  • transformatori — pretvara/transformiše/menja korisni teret poruke i stvara novu poruku sa transformisanim korisnim opterećenjem
  • adapteri — za integraciju sa drugim tehnologijama i sistemima
  • filtri — filtrira poruku na osnovu kriterijuma. Ako kriterijumi nisu ispunjeni, poruka se odbacuje
  • aktivatori usluge — pozivaju operaciju na uslužnom objektu upravljanja i revizije

Reference[uredi | uredi izvor]

  1. ^ „Spring Framework 1.0 Final Released”. Official Spring Framework blog. Pristupljeno 27. 8. 2021. 
  2. ^ Jolt winners 2006
  3. ^ „JAX Innovation Award Gewinner 2006”. Arhivirano iz originala 17. 8. 2021. g. 
  4. ^ Spring Framework documentation for the Core Container
  5. ^ What is the difference between the depencylookup and dependency injection - Spring Forum. Forum.springsource.org (2009-10-28). Retrieved on 2013-11-24.
  6. ^ „Spring AOP XML Configuration”. Arhivirano iz originala 10. 02. 2018. g. Pristupljeno 27. 08. 2021. 
  7. ^ AspectJ Annotation Configuration
  8. ^ „Spring Data JPA for Abstraction of Queries”. Pristupljeno 27. 08. 2021. 
  9. ^ Introduction to the Spring Framework
  10. ^ Johnson, Expert One-on-One J2EE Design and Development, Ch.12. et al.
  11. ^ Spring Boot