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
SPRING FRAMEWORKbemutatása
Vasi SándorGreencode Kft
[email protected]. Krizsán ZoltánMiskolci 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/images/spring-overview.png
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/#overview-getting-started-with-spring
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?
class other classuses
DEPENDENCY
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
Dependency injection 3.
public void myMethod(DataBase db) {
db.fetchData …
}
Miért jó ez nekünk?
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.
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 DependencyDependency
Interface
DependencyImplements
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á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(); }
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
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()); }}
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!