32
SPRING FRAMEWORK bemutatása Vasi Sándor Greencode Kft [email protected] Dr. Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék

SPRING FRAMEWORK bemutatása

  • Upload
    hoai

  • View
    67

  • Download
    0

Embed Size (px)

DESCRIPTION

SPRING FRAMEWORK bemutatása. Vasi Sándor Greencode Kft Sandor.vasi @ greencode.hu. A Spring Framework alapelvei. A J2EE fejlesztésének nem kellene ilyen bonyolultnak lennie (Rod Johnson – J2EE Development without J2EE) Legyen a keretrendszer lightweight. - PowerPoint PPT Presentation

Citation preview

Page 1: SPRING FRAMEWORK bemutatása

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

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

Forrás: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/images/spring-overview.png

Page 4: SPRING FRAMEWORK bemutatása

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

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

Konténerek

Page 7: SPRING FRAMEWORK bemutatása

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

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

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

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

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

Dependency Management

Erőforrások megkeresése Tárolása és a classpath-hoz adása

Page 13: SPRING FRAMEWORK bemutatása

Dependency Injection

Dependency Injection

Mit jelent a “dependency” – azaz függőség?

class other classuses

DEPENDENCY

Page 14: SPRING FRAMEWORK bemutatása

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

Dependency injection 3.

public void myMethod(DataBase db) {

db.fetchData …

}

Miért jó ez nekünk?

Page 16: SPRING FRAMEWORK bemutatása

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

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

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

Dependency Inversion Principle 2.

CLASS DependencyDependency

Interface

DependencyImplements

Dependency 2

Soft Dependency

Page 20: SPRING FRAMEWORK bemutatása

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

Dependency Injection

Forrás: http://www.martinfowler.com/articles/injection.html

Page 22: SPRING FRAMEWORK bemutatása

Service Locator

Forrás: http://www.martinfowler.com/articles/injection.html

Page 23: SPRING FRAMEWORK bemutatása

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

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

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

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

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

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

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

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

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

Köszönöm a figyelmet!