Spring alapok

Download Report

Transcript Spring alapok

SPRING
FRAMEWORK
bemutatása
Vasi Sándor
Greencode Kft
[email protected]
Dr. Krizsán Zoltán
Miskolci Egyetem
Általános Informatikai Tanszék
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.”
Forrás: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/im
A Spring Framework alapelvei

A J2EE fejlesztésének nem kellene ilyen
bonyolultnak lennie (Rod Johnson – J2EE
Development without J2EE)

Legyen a keretrendszer lightweight
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
Konténerek
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
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…
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)
Spring konténer
(ApplicationContext)
Forrás: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#ov
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.
Dependency Management

Erőforrások megkeresése

Tárolása és a classpath-hoz adása
Dependency Injection
Dependency Injection
Mit jelent a “dependency” – azaz függőség?
uses
class
DEPENDENCY
other class
Dependency Injection 2.
FETCH
MODEL
DATABASE
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
Dependency injection 3.
public void myMethod(DataBase db) {
db.fetchData …
}
Miért jó ez nekünk?
Dependency Injection 4.
Házépítő
robot
A robot deszkákból falakat tud összeépíteni.
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?
vagy
Ajtógyártók szabvány ajtóit építtetjük be vele?
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?
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.
Dependency Inversion
Principle 2.
CLASS
Dependency
Dependency
Dependency
Implements
Interface
Dependency 2
Soft Dependency
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
Dependency Injection
Forrás: http://www.martinfowler.com/articles/injection.html
Service Locator
Forrás: http://www.martinfowler.com/articles/injection.html
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?
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
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
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");
}
}
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(); }
SPRING – DI példa - injektálás
class Traveller {
public static void main(String[] args) {
ApplicationContext context = new
ClassPathXmlApplicationContext("spring.xml");
Vehicle v = context.getBean(“vehicle”);
v.move();
}
}
@Component
class Car implements Vehicle {
@Override
public void move() {
System.out.println(“move”);
}
}
interface Vehicle { void move(); }
SPRING – DI példa
CAR
WHEEL
A Car igényelni fog egy Wheel objektumot
Spring framework-kel
CAR
WHEEL
A Car kap majd egy Wheel objektumot a
konténertől
SPRING tesztelése
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:springconfig.xml")
public class SpringAppTests {
@Autowired
private HelloService helloService;
@Test
public void testSayHello() {
Assert.assertEquals("Hello world!",
helloService.sayHello());
}
}
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, …
Köszönöm a figyelmet!