Razvoj Java enterprise aplikacija uobičajeno zahtijeva upotrebu velikog broja različitih proizvoda, biblioteka i frameworka. Gotovo svaka oblast koju developer želi obuhvatiti svojom aplikacijom nudi alternative u vidu sličnih tehnologija, dovoljno različitih tek toliko da zadaju glavobolju prilikom izbora one prave, i da doprinesu vječitom samopropitivanju u smislu pravilnosti donesenog izbora. Spring framework je izuzetno opsežan aplikacioni framework koji znatno olakšava spomenutu dilemu, integrirajući razne open-source tehnologije u kohezivnu cjelinu obogaćenu različitim Spring unapređenjima.
Spring je dakle, prije svega ostalog, open-source Java platforma sa izuzetno kvalitetnom podrškom za razvoj aplikacija. Gotovo da ne postoji oblast koju ovaj framework nije obuhvatio svojim bogatim skupom modula i podprojekata. Želite napraviti web aplikaciju povezanu sa relacionom bazom podataka? Integrirati embedded web server i bazu podataka u izvršni fajl aplikacije? Kreirati SOAP ili REST servise? Umjesto relacione baze koristiti neku NoSQL varijantu? Povezati se na neku društvenu mrežu, npr. pisati po zidovima Facebook prijatelja? Spašavati datoteke na Dropbox account? Komunicirati sa drugim aplikacijama koristeći messaging servere tipa ActiveMQ ili RabbitMQ? Spring nudi sve ovo, i mnogo više.
Programiranje u Springu je vezano za koncept inverzije kontrole, poznatim i pod nazivom Dependency Injection. Ovaj koncept je praktično obezbijedio kreiranje loosely-coupled objekata i njihovo automatsko povezivanje u smislenu aplikacionu cjelinu od strane frameworka. Npr. posmatrajmo sljedeće dvije java klase:
package com.example.demo; @Configuration |
package com.example.demo; @RestController public HomeController(DateFormat dateFormat) { |
Klasa označena @Configuration anotacijom će biti instancirana veoma rano u životnom ciklusu aplikacije, prilikom njenog startupa. Tom prilikom, Spring će izvršiti svaku metodu označenu @Bean anotacijom i rezultat metode spasiti u registry objekata koji se naziva aplikacionim kontekstom. U ovom slučaju, aplikacioni kontekst sadrži singleton objekat pod nazivom defaultDateFormat. Klasa HomeController predstavlja REST kontrolera, odnosno još jednu klasu koju Spring automatski instancira za nas. Treba primijetiti da konstrukcija homeController objekta zahtijeva prisustvo objekta tipa DateFormat. Spring će u ovom slučaju pretražiti aplikacioni kontekst, pronaći defaultDateFormat objekat i iskoristiti ga za instanciranje HomeController klase. Kao što vidimo, Spring je izvršio instanciranje pojedinačnih klasa, te riješio njihove međusobne ovisnosti. Programer se može brinuti o pisanju aplikacione logike, a sve detalje instanciranja, redoslijeda, povezivanja i uništavanja objekata prepustiti frameworku.
Još jedna stvar koju Spring radi izuzetno dobro jeste apstrahiranje programskih koncepata. Pretpostavimo npr. da želimo implementirati logiku keširanja podataka koje čitamo iz baze podataka. U tu svrhu možemo iskoristiti Guava biblioteku. Ukoliko nakon nekog vremena, iz bilo kojeg razloga, poželimo koristiti neko drugo rješenje, recimo EhCache, morat ćemo mijenjati kôd i koristiti sasvim novi programski API. Spring sa druge strane obezbjeđuje generički API za keširanje, koji u pozadini može koristiti Guavu, EhCache, Caffeine, Gemfire ili neku sličnu tehnologiju. Zapravo, odabir konkretne tehnologije je u ovom slučaju stvar konfiguracije. Navedeni pristup osigurava ne samo jednostavnu zamjenu kešing rješenja, nego isto tako čini cijeli pristup pisanja keširanja znatno bržim i jednostavnijim - umjesto više API-ja mi trebamo poznavati samo jedan.
Možda i najočiglednija prednost Spring frameworka, iz ugla programera, se ogleda u njegovom ekosistemu odnosno velikom broju modula i projekata koji daju zaista velike mogućnosti u razvoju enterprise aplikacija. Ova modularnost osigurava da aplikacija, ručno ili upotrebom dependency management alata kao što je Maven, importira samo one module koji joj zaista trebaju. Tako, ako želimo razvijati web aplikaciju treba nam spring-mvc, za razvoj messaging funkcionalnosti možemo koristiti spring-integration, za baze podataka koristiti spring-data-jpa, itd. Pored ovih "funkcionalnih" modula, Spring sadrži i module koji predstavljaju totalne nove paradigme programiranja Spring aplikacija, kao što su Spring Boot, Spring Groovy ili Spring Roo. Ovdje ćemo posebno naglasiti Spring Boot kao najefikasniji i najbrži način ulaska u svijet Springa, i u narednim postovima ćemo koristiti upravo ovaj projekat za objašnjavanje koncepata i pisanje aplikacija u Springu.
Naravno, Spring framework je nemoguće opisati u jednom članku i zbog toga vam savjetujemo da posjetite https://spring.io radi dodatnih detalja. Na linku https://spring.io/guides može se naći veliki broj početnih primjera, dok https://spring.io/projects nudi pregled svih Springovih projekata i njihovih mogućnosti. U narednom članku ćemo početi pisati prve primjere, predstavljajući ključne koncepte frameworka. Do narednog čitanja....
Almir Pehratović, Infobip BH d.o.o. https://www.infobip.com/en/about
Komentari 0 KOMENTARA
Komentiraj