240 likes | 418 Views
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.
E N D
SPRING FRAMEWORKbemutatása Vasi Sándor GreencodeKft Sandor.vasi@greencode.hu
A Spring Framework alapelvei A J2EE fejlesztéséneknemkelleneilyenbonyolultnaklennie (Rod Johnson – J2EE Development without J2EE) Legyen a keretrendszer lightweight
A Spring Framework alapelvei 2. AzOOP irányelveksokkalfontosabbak, mint a bármelyik framework, mint pl a J2EE Túlsok a Checked Exception a Java-ban. A framework ne kényszerítsen a használatára A tesztelhetőségetelőkellsegítenieegy framework-nek Fejlesztésiciklusjavítása == produktuvitásnövelése
Miszükséges a SPRING működéséhez? • Egykülsőalkalmazás, amiinicializálja a SPRING-et. (Ezlehetakár a web-container is) • Osztályok, amelyek BEAN-ek, amikhetmajd el tudokérni a framework segítségével • Bean Factory vagy Application Context • Konfigurációsfá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…
Dependency Injection Dependency Injection Mitjelent a “dependency” – azazfüggőség? DEPENDENCY uses class other class
Dependency Injection 2. DEPENDENCY MODEL DATABASE FETCH PUSH • A dependency injection segítségével: • nemkelltöbbémetódusainkban a newoperátorthasználni • helyettemegkapjukaztparaméterként
Dependency injection 3. Miértjóeznekünk? public void myMethod(DataBasedb) { db.fetchData … }
Dependency Injection 4. Házépítő robot A robot deszkákbólfalakattudössze-építeni. Mittegyünk, amikorarrakerül a sor, hogyazajtótkellbeépíteni? Felprogramozzuk a robotunknat, hogytudjonegyediajtót is építeni a deszkákból?vagy Ajtógyártókszabványajtó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űveletetazangolszakirodalomdecoupeling–nek nevezi Miértfontos a modellekfüggetlenítéseegymástól?
Dependency Inversion Principal Magasszintűmoduloknaknemszabadalacsonyszintűmoduloktólfüggniük. Midnkétmodulnakabsztakcióktólkellfüggnijük. Azabsztrakcióknaknemszabad a részletekktőlfüggniük, pontellenkezőleg, a részleteknekkellazabsztakcióktólfüggniük.
Dependency Inversion Principle 2. Dependency CLASS Dependency Dependency Implements Interface Dependency 2 Soft Dependency
Dependency Inversion Principal 3. A Dependency Injection használatával a kódunk: Tisztálbblesz Könnyebbleszmódosítani éskönnyebbleszújrafelhasználni
Hogyaninicializáljuk a függőségeket? Osztályaink most márkülső dependency-ktőlfüggnek Hogyderítjükki, hogy a függőségeknekvannak-e másfüggőségeik? Hogyaninicializá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, amikormeghívjuk agetDependency()metódusunkat, Inicializál, vagymeglévőobjektumothozlétre A Service Locator nagyelőnye, hogykomplexfüggőségeket is transzparensenfeltudoldani
SPRING – DI példa 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 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 class Traveller { public static void main(String[] args) { ApplicationContextcontext = 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 Spring framework-kel CAR WHEEL A Car kapmajdegy Wheel objektumot a konténertől A Car igényelni fog egy Wheel objektumot
SPRING tesztelése @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring-config.xml") public class SpringAppTests { @Autowired private HelloServicehelloService; @Test public void testSayHello() { Assert.assertEquals("Hello world!", helloService.sayHello()); } }
MAVEN http://maven.apache.org Build mechanizmusegyszerűsítésérejöttlétre Külső library-k kezelése (Nincstöbbé lib verziózás, lib-ekmásolgatása) Maven Repository Maven életciklus: clean, compile, deploy, install, … Packaging types: ear, ejb, jar, war, …