UVOD U SPRING
Oznaka predmeta: IT355
Naziv predmeta: Veb sistemi 2
Predavanje broj: 1
Nastavna jedinica: Uvod u Spring
Školska godina:
2024/2025.
Preporučena literatura na predmetu
• Spilca, L. (2021). Spring Start Here: Learn what you need and learn it well.
Simon and Schuster.
• Walls, C. (2022). Spring in action. Simon and Schuster.
• Spilca, L. (2020). Spring security in action. Manning.
2
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Sadržaj
• Šta je Spring i zašto koristimo aplikacione okvire?
• Spring ekosistem
• Spring u scenarijima iz stvarnog sveta
• Spring kontekst
• Dodavanje novih bean-ova u Spring kontekst
o Korišćenje Bean anotacije
o Korišćenje stereotipnih anotacija
o Programski (manualno) dodavanje bean-ova
3
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
ŠTA JE SPRING I ZAŠTO KORISTIMO APLIKACIONE
OKVIRE?
Šta je Spring?
• Spring je popularan aplikacioni okvir (framework) za
Java ekosistem.
• Olakšava razvoj aplikacija pružanjem gotove
infrastrukture.
• Koristi se za backend sisteme, web aplikacije, pa čak i
za automatizovano testiranje.
• Sve češće se koristi i sa Kotlinom, naročito u
mobilnom razvoju.
5
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Šta je aplikacioni okvir (framework)?
Zamislite da treba da napravimo sto.
•
Dobiješ sve delove u kutiji, već izmerenih
dimenzija.
•
Moraš sam da dizajniraš sto.
•
Ideš u stovarište po drvo, sečeš ga,
obrađuješ, biraš šrafove, lepak, alat...
•
Uputstvo ti pokazuje redosled sastavljanja.
•
Potrošiš mnogo vremena i lako možeš
da pogrešiš.
•
Koristiš unapred pripremljene delove
•
•
Na kraju praviš jedinstven sto, ali sve si
uradio od nule.
Samo sastaviš sto — brzo, lako i
funkcionalno.
•
Ovo je kao da koristiš Spring:
o Framework ti nudi gotovu
infrastrukturu,
o ti se fokusiraš samo na "svoju" logiku
(kakav sto želiš), a Spring se brine o
“šrafovima” – povezivanju komponenti,
6
bezbednosti, konfiguraciji
Ovo je isto kao da pišeš aplikaciju bez
frameworka.
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Šta je aplikacioni okvir (framework)?
• Skup uobičajenih funkcionalnosti koje olakšavaju razvoj softverskih
aplikacija.
• Uklanja potrebu za pisanjem koda ispočetka – koristi gotova rešenja.
• Pojavio se iz prakse: programeri su želeli da ponovo koriste deo koda u
više aplikacija.
• Zašto su okviri nastali?
o
o
o
Sve više aplikacija ima slične tehničke zahteve: sigurnost, logovanje, obrada
podataka…
Kod se može ponovo koristiti → štedi vreme, smanjuje greške.
Poslovna logika je jedinstvena, ali tehničke komponente često nisu.
7
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Poslovna logika aplikacije
• Korisnici vide samo vrh
ledenog brega → poslovnu
logiku.
• Većina aplikacije je “ispod
površine” → kod koji
obezbeđuju zavisnosti
(framework).
• Spring se brine o tim delovima
kako bi programer pisao samo
ono što je važno za
funkcionalnost.
8
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
SPRING EKOSISTEM
Spring – ekosistem okvira
• Spring se često naziva "okvirom",
ali je u stvari čitav ekosistem
manjih okvira.
• U realnim aplikacijama koristi se
više okvira zajedno – svaki rešava
specifičan problem.
• Spring omogućava razvoj od
testova do kompleksnih enterprise
aplikacija.
• Veoma je popularan i koristi se i sa
drugim JVM jezicima, kao što je
Kotlin.
10
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Spring Core
• Spring Core je osnovni deo Spring okvira. Osnovna ideja: Inverzija kontrole
(IoC – Inversion of Control).
• Spring koristi IoC kontejner, poznat kao Spring kontekst, koji upravlja
objektima. Programer definiše šta aplikacija koristi, a Spring upravlja
kreiranjem i povezivanjem tih objekata.
• Takođe, kao deo Spring Core-a, nalazi se i funkcionalnost Spring aspekata ponašanja koja se primenjuju na više mesta u aplikaciji. Koristi se npr. za
logiku koja treba da se izvrši oko svake metode (@Before, @After...).
• Spring Expression Language (SpEL) – još jedan deo Spring Core-a, koja
omogućava da opisujete konfiguracije za Spring koristeći određeni jezik.
11
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Spring Core i IoC kontejner
• U IoC principu, framework preuzima
kontrolu nad izvršavanjem aplikacije.
• Umesto da aplikacija sama pravi i
povezuje objekte, framework to radi
umesto nje.
• Programer konfiguriše kako da se
objekti povežu, ali ne upravlja
direktno njihovim životnim ciklusom.
• Ovo čini kod: jednostavnijim,
fleksibilnijim, lakšim za testiranje i
održavanje.
12
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Spring Data Access
• Za većinu aplikacija, ključno je da sačuvaju deo podataka koje
obrađuju.
• Rad sa bazama podataka je osnovni koncept, a u Spring-u se
za upravljanje perzistencijom koristi Data Access modul.
• Spring Data Access omogućava:
o Korišćenje JDBC-a,
o Integraciju sa ORM (poput Hibernate-a)
o Upravljanje transakcijama.
13
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Spring MVC i Spring testing
• Najčešće aplikacije razvijene u Spring-u su web aplikacije, a u
okviru Spring ekosistema postoji veliki broj alata koji
omogućavaju razvoj web aplikacija i servisa na različite
načine.
• Možete koristiti Spring MVC za razvoj aplikacija u
tradicionalnom servlet stilu, što je danas vrlo često u
industriji.
• Spring testing modul nudi bogat set alata za pisanje jediničnih
i integracionih testova.
14
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Proširenja Spring ekosistema
• Spring uključuje niz dodatnih projekata:
o Spring Data – rad sa bazama podataka
o Spring Security – autentifikacija i autorizacija
o Spring Cloud – mikroservisi i distribuirani sistemi
o Spring Batch – obrada velikih količina podataka
o Spring Boot – konvencija umesto konfiguracije
15
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
SPRING U SCENARIJIMA IZ STVARNOG SVETA
Gde sve Spring može da se koristi
• Backend aplikacije
Pristup bazama podataka, logika servisa, komunikacija sa drugim sistemima
o Npr. bankarski sistem, REST API, sistemi za plaćanje
o
•
Aplikacije za automatizovano testiranje
Koristi se sa alatima kao što su Selenium, Cucumber, Gauge
o Spring upravlja bean-ovima, povezuje sa bazom, simulira zavisnosti (mock)
o
• Desktop aplikacije
o
Iako ređe, mogu koristiti Spring Core i IoC za čist i modularan kod
• Mobilne aplikacije
o
Spring for Android omogućava ograničenu upotrebu Spring komponenti
17
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Kada ne koristiti framework
• Za jednostavne projekte gde je framework veći nego problem
koji rešava
• Ako aplikacija treba da bude ekstremno mala ili bez zavisnosti
• Kada okruženje (npr. embedded sistemi) ima stroga
ograničenja
• Ako tim nema iskustva sa framework-om → može usporiti
razvoj
18
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
SPRING KONTEKST
Spring kontekst i bean-ovi
• Spring kontekst je osnovni mehanizam koji upravlja svim bean-ovima.
• Ako objekat nije registrovan u kontekstu, Spring ga ne vidi i ne koristi.
• Bean je objekat kojim Spring upravlja (npr. instancira, povezuje,
konfiguriše).
• Ne moraju svi objekti biti bean-ovi — samo oni koje Spring treba da
kontroliše.
• Bitno je znati:
kako se bean-ovi dodaju u kontekst,
o kako se povezuju međusobno.
o
20
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Maven i IntelliJ IDEA – osnovna integracija
• Maven nije deo Spring-a, ali je najčešće korišćen build alat u
Spring projektima.
• Koristi se za:
o upravljanje zavisnostima (bibliotekama),
o izgradnju i organizaciju projekta.
• Zavisnosti se definišu u fajlu pom.xml.IntelliJ IDEA automatski
prepoznaje Maven projekte i povlači potrebne biblioteke.
• Maven koristi centralni repozitorijum (Maven Central) za
preuzimanje JAR fajlova.
21
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Maven i IntelliJ IDEA – osnovna integracija
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>sq_ch2_ex1</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
</dependencies>
</project>
22
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
DODAVANJE NOVIH BEAN-OVA U SPRING
KONTEKST
Dodavanje novih bean-ova u Spring kontekst
• Bean = objekat kojim Spring upravlja u okviru konteksta.
• Postoji više načina za dodavanje bean-ova, u zavisnosti od scenarija:
Korišćenjem @Bean anotacije - Ručno definišemo metodu koja vraća objekat,
unutar @Configuration klase.
o Korišćenjem stereotipnih anotacija (@Component, itd.) - Dodajemo anotaciju
direktno iznad klase koju želimo da Spring automatski detektuje.
o Programatski (manualno dodavanje) - Koristimo registerBean() metod da
dinamički registrujemo objekat u kontekstu.
o
• Izbor zavisi od toga: da li je klasa pod našom kontrolom, da li želimo
potpunu kontrolu nad kreiranjem, da li nam je potreban runtime
uslov itd.
24
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Priprema projekta za rad sa kontekstom
public class Main {
public static void main(String[] args) {
var context = new AnnotationConfigApplicationContext();
Parrot p = new Parrot();
}
}
•
Koristimo
AnnotationConfigApplicationContext
za kreiranje instance Spring konteksta.
•
Spring nudi više implementacija
konteksta, ali implementacija
zasnovana na anotacijama je danas
najčešći pristup.
public class Parrot {
private String name;
// Omitted getters and setters
}
25
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Korišćenje @Bean anotacije
public class Main {
public static void main(String[] args) {
var context = new AnnotationConfigApplicationContext(ProjectConfig.class);
Parrot p = context.getBean(Parrot.class);
System.out.println(p.getName());
}
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
}
26
Korišćenje stereotipnih anotacija
public class Main {
public static void main(String[] args) {
var context = new
AnnotationConfigApplicationContext(
ProjectConfig.class);
Parrot p = context.getBean(Parrot.class);
System.out.println(p);
System.out.println(p.getName());
}
}
27
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Programsko dodavanje bean-ova u Spring kontekst
• Od verzije 5, Spring omogućava ručno (programsko)
dodavanje bean-ova pomoću registerBean().
• Ovaj pristup nudi veću fleksibilnost u poređenju sa
@Bean i @Component anotacijama.
28
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Programsko (manuelno) dodavanje bean-ova
• Koristi se kada:
o je dodavanje bean-
ova uslovno (npr. na
osnovu konfiguracije),
o nije moguće koristiti
anotacije (npr. treća
biblioteka),
o želimo dinamičku
kontrolu u runtime-u.
public class Main {
public static void main(String[] args) {
var context =
new AnnotationConfigApplicationContext(
ProjectConfig.class);
Parrot x = new Parrot();
x.setName("Kiki");
Supplier < Parrot > parrotSupplier = () - > x;
context.registerBean("parrot1",
Parrot.class, parrotSupplier);
Parrot p = context.getBean(Parrot.class);
System.out.println(p.getName());
}
}
29
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
ZAKLJUČAK
Zaključak
• Spring je moćan ekosistem koji pojednostavljuje razvoj Java
aplikacija.
• IoC (Inversion of Control) je osnovni princip Spring-a –
kontrolu nad objektima preuzima framework.
• Objekti kojima Spring upravlja nazivaju se bean-ovi i nalaze se
u Spring kontekstu.
• Bean-ovi se nalaze u Spring kontekstu, koji ih povezuje i
koristi.
31
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
Zaključak
• Spring omogućava tri glavna pristupa za registraciju bean-ova:
@Bean metode – puna kontrola nad instancom,
o @Component i druge stereotipne anotacije – manje koda, automatsko
skeniranje,
o Programski (manualno) pomoću registerBean() – fleksibilno, za posebne
slučajeve.
o
• Spring je modularan – dodajemo samo potrebne zavisnosti
(npr. spring-context).
• Razumevanje konteksta i upravljanja bean-ovima je osnova za
dalje učenje Spring-a.
32
© UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnožavanje nije dozvoljeno.
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )