SPRING FRAMEWORK bemutatása
description
Transcript of SPRING FRAMEWORK bemutatása
![Page 1: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/1.jpg)
SPRING FRAMEWORKbemutatása
Vasi SándorGreencode Kft
[email protected]. Krizsán ZoltánMiskolci Egyetem
Általános Informatikai Tanszék
![Page 2: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/2.jpg)
Definició
„The Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java applications. Spring handles the infrastructure so you can focus on your application.”
![Page 3: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/3.jpg)
Forrás: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/images/spring-overview.png
![Page 4: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/4.jpg)
A Spring Framework alapelvei
A J2EE fejlesztésének nem kellene ilyen bonyolultnak lennie (Rod Johnson – J2EE Development without J2EE)
Legyen a keretrendszer lightweight
![Page 5: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/5.jpg)
A Spring Framework alapelvei 2.
Az OOP irányelvek sokkal fontosabbak, mint a bármelyik framework, mint pl a J2EE
Túl sok a Checked Exception a Java-ban. A framework ne kényszerítsen a használatára (erős függöség)
A tesztelhetőséget elő kell segítenie egy framework-nek
Fejlesztési ciklus javítása == produktuvitás növelése
![Page 6: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/6.jpg)
Konténerek
![Page 7: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/7.jpg)
Mi szükséges a SPRING működéséhez?
Egy külső alkalmazás, ami inicializálja a SPRING-et. (Ez lehet akár a web-container is)
Osztályok, amelyek BEAN-ek, amiket majd el tudok érni a framework segítségével
Bean Factory vagy Application Context Konfigurációs fájl
XML annotáció Java osztály
Spring lib-ek
![Page 8: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/8.jpg)
Spring Framework
Dependency Injection Aspect-Oriented Programming
including Spring's declarative transaction management
Spring MVC web application and RESTful web service framework
Foundational support for JDBC, JPA, JMS és még sok egyéb…
![Page 9: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/9.jpg)
Függőség
Direkt Alkalmazásunk -> SPringtől
Indirekt (tranzitív) Alkalmazásunk -> commons-dbcp -
> commons-pool (direkt a commons-dbcp) (indirekt a commons-pool)
![Page 10: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/10.jpg)
Spring konténer (ApplicationContext)
Forrás: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview-getting-started-with-spring
![Page 11: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/11.jpg)
Spring konténer (ApplicationContext)
Példányosítja Beállítja Összeilleszti (köti)
a Bean-eket a konfiguráció ( XML, Java annotations, or Java code) alapján.
![Page 12: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/12.jpg)
Dependency Management
Erőforrások megkeresése Tárolása és a classpath-hoz adása
![Page 13: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/13.jpg)
Dependency Injection
Dependency Injection
Mit jelent a “dependency” – azaz függőség?
class other classuses
DEPENDENCY
![Page 14: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/14.jpg)
Dependency Injection 2.
MODEL DATABASEFETCH
DEPENDENCY
PUSH
A dependency injection segítségével:• nem kell többé metódusainkban a new operátort
használni (tesztelésnél fontos)• helyette megkapjuk azt paraméterként
![Page 15: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/15.jpg)
Dependency injection 3.
public void myMethod(DataBase db) {
db.fetchData …
}
Miért jó ez nekünk?
![Page 16: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/16.jpg)
Dependency Injection 4.
Házépítő robot
Mit tegyünk, amikor arra kerül a sor, hogy az ajtót kell beépíteni?
Felprogramozzuk a robotunknat, hogy tudjon egyedi ajtót is építeni a deszkákból?
vagyAjtógyártók szabvány ajtóit építtetjük be vele?
A robot deszkákból falakat tud össze-építeni.
![Page 17: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/17.jpg)
Dependency Injection 5.
A Dependency Injection függetleníti a modeljeinket a külsú függőségektől (dependency)
Ezt a műveletet az angol szakirodalom decoupeling –nek nevezi
Miért fontos a modellek függetlenítése egymástól?
![Page 18: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/18.jpg)
Dependency Inversion Principal
Magasszintű moduloknak nem szabad alacsony szintű moduloktól függniük. Midnkét modulnak absztakcióktól kell függniük.
Az absztrakcióknak nem szabad a részletekktől függniük, pont ellenkezőleg, a részleteknek kell az absztakcióktól függniük.
![Page 19: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/19.jpg)
Dependency Inversion Principle 2.
CLASS DependencyDependency
Interface
DependencyImplements
Dependency 2
Soft Dependency
![Page 20: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/20.jpg)
Dependency Inversion Principal 3.
A Dependency Injection használatával a kódunk:
Tisztálbb lesz Könnyebb lesz módosítani Könnyebb lesz teszteni és könnyebb lesz újrafelhasználni
![Page 21: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/21.jpg)
Dependency Injection
Forrás: http://www.martinfowler.com/articles/injection.html
![Page 22: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/22.jpg)
Service Locator
Forrás: http://www.martinfowler.com/articles/injection.html
![Page 23: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/23.jpg)
Hogyan inicializáljuk a függőségeket?
Osztályaink most már külső dependency-ktől függnek
Hogy derítjük ki, hogy a függőségeknek vannak-e más függőségeik?
Hogyan inicializáljuk a külső függőségeket?
![Page 24: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/24.jpg)
Service Locator Design Pattern
Adott objektum (szolgáltatás) létrehozását kiveszi a szolgáltatás igénylője (kliens) hatásköréből. A szolgáltatást a komponens konténer hozza létre és tárolja (registry), a kliens a konténer API-n keresztül érheti el az arra mutató referenciát (lookup).
Egyéb elnevezései:Object Factory, Component Broker, Component Registry
![Page 25: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/25.jpg)
Service Locator működése
Minden esetben, amikor meghívjuk a getDependency() metódusunkat,
Inicializál, vagy meglévő objektumot hoz létre
A Service Locator nagy előnye, hogy komplex függőségeket is transzparensen fel tud oldani
![Page 26: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/26.jpg)
SPRING – DI példa – osztály függőség
class Traveller { public static void main(String[] args) { Car car = new Car(); car.move(); }}
class Car { public void move() { System.out.println("move"); }}
![Page 27: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/27.jpg)
SPRING – DI példa – interfész bevezetése
class Traveller { public static void main(String[] args) { Vehicle v = new Car(); v.move(); }}class Car implements Vehicle { @Override public void move() { System.out.println("move"); }}
interface Vehicle { void move(); }
![Page 28: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/28.jpg)
SPRING – DI példa - injektálásclass Traveller { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Vehicle v = context.getBean(“vehicle”); v.move(); }}
@Componentclass Car implements Vehicle { @Override public void move() { System.out.println(“move”); }}interface Vehicle { void move(); }
![Page 29: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/29.jpg)
SPRING – DI példa
A Car igényelni fog egy Wheel objektumot
CAR WHEEL
Spring framework-kelCAR WHEEL
A Car kap majd egy Wheel objektumot a konténertől
![Page 30: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/30.jpg)
SPRING tesztelése@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:spring-config.xml")public class SpringAppTests { @Autowired private HelloService helloService;
@Test public void testSayHello() { Assert.assertEquals("Hello world!", helloService.sayHello()); }}
![Page 31: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/31.jpg)
MAVEN
http://maven.apache.org Build mechanizmus egyszerűsítésére
jött létre Csomagok közötti függőség kezelés Külső library-k kezelése (Nincs többé
lib verziózás, lib-ek másolgatása) Maven Repository Maven életciklus: clean, compile,
deploy, install, test, … Packaging types: ear, ejb, jar, war, …
![Page 32: SPRING FRAMEWORK bemutatása](https://reader030.fdocuments.us/reader030/viewer/2022033023/56816384550346895dd46978/html5/thumbnails/32.jpg)
Köszönöm a figyelmet!