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!