+ All Categories
Home > Business > Spring 2.0

Spring 2.0

Date post: 02-Jul-2015
Category:
Upload: thorsten-kamann
View: 1,653 times
Download: 0 times
Share this document with a friend
Description:
Eine Einführung in Spring 2. Was sind die neuen Features, welche Verbesserungen gibt es?
54
Thorsten Kamann [email protected] 1 1
Transcript
Page 1: Spring 2.0

Thorsten Kamann ● [email protected] 11

Page 2: Spring 2.0

Thorsten Kamann ● [email protected] 22

Inhalt

Einführung

Konfiguration

AOP

Transaktionen

Spring Web MVC

Sonstiges

Zusammenfassung

Page 3: Spring 2.0

Thorsten Kamann ● [email protected] 33

Einführung: Was ist Spring?

Page 4: Spring 2.0

Thorsten Kamann ● [email protected] 44

Einführung: Was ist Spring?

IoC(Dependency

Injection)

Ansammlung von API‘s

Programmiermodell

Page 5: Spring 2.0

Thorsten Kamann ● [email protected] 55

Einführung: Spring Komponenten

Spring CoreThe IoC Container

AOPSpring AOP

AspectJ Integration

DAOSpring JDBCTransaction

Management

ORMHibernate

JPATopLink

JDO

JEEJMXJMSJCA

RemotingEJB‘sEmail

WebSpring Web MVC

StrutsWebWorkTapestry

JSFPDF

Jasper ReportsExcel

Spring Portlet MVC

Page 6: Spring 2.0

Thorsten Kamann ● [email protected] 66

Einführung: Features

• Zentralisierte und automatisierte Konfiguration und Verdrahtung der Anwendungsobjekte

• Nicht invasiv• Fügt lose gekoppelte Komponenten (POJO's) zu

komplexen Systemen zusammen• Skalierbar• Verbessert die Testbarkeit der Komponenten,

indem sie zuerst unabhängig von der Serverinfrastruktur getestet werden können

Leichtgewichtiger Container

Page 7: Spring 2.0

Thorsten Kamann ● [email protected] 77

Einführung: Features

• Erweiterbares Transaktions-Management• Deklarative Konfiguration der Transaktionen,

ohne tief in das entsprechende Framework einzusteigen

• Im Gegensatz zu reinem JTA oder EJB CMP ist dieses Transaktions-Management nicht auf J2EE-Umgebungen beschränkt

Abstraktionsschicht für Transaktions-Management

Page 8: Spring 2.0

Thorsten Kamann ● [email protected] 88

Einführung: Features

• Reduziert den Code für auf JDBC-basierte Anwendungen

• Vereinfacht die Fehlerbehandlung• Bietet eine aussagekräftige Exception-

Hierarchie (herstellerunabhängig)• Exceptions basieren auf der DAO-Exception-

Hierarchie

Abstraktionsschicht für reines JDBC

Page 9: Spring 2.0

Thorsten Kamann ● [email protected] 99

Einführung: Features

• Unterstützung von Hibernate, Toplink, JDO und iBATIS SQL Maps

• Vereinfacht die Entwicklung mit diesen O/R-Mappern

• Unterstützung von Transaktionen• Unterstützung des DAO-Patterns

Integration von populären O/R-Mappern

Page 10: Spring 2.0

Thorsten Kamann ● [email protected] 1010

Einführung: Features

• Basiert auf AspectJ• Vollständig integriert in das Spring

Konfigurations-Management• Transaktions-Management basiert auf AOP• Jedes Objekt in Spring kann mittels AOP

gemanaged werden

AOP Funktionalität

Page 11: Spring 2.0

Thorsten Kamann ● [email protected] 1111

Einführung: Features

• Benutzt die Spring-Core Funktionalitäten• Sehr konfigurierbar durch verschiedene

Strategie-Interfaces• Kombinierbar mit den verschiedensten

Viewtechnologien:• JSP, Velocity, Tiles, iText, POI

Flexibles MVC-WebapplicationFramework

Page 12: Spring 2.0

Thorsten Kamann ● [email protected] 1212

Konfiguration

Page 13: Spring 2.0

Thorsten Kamann ● [email protected] 1313

Konfiguration: XML-Schema

• Spring Konfigurationen basieren auf XML-Schema

• Durch XML-Schema ist eine direktere Konfiguration möglich

• Dadurch kürzere und eindeutigere Konfigurationen

Konfiguration per XML-Schema

Page 14: Spring 2.0

Thorsten Kamann ● [email protected] 1414

Konfiguration: XML-Schema

•<bean id=“bean1" class=“a.b.Bean">

<property name=“prop1“ value=“value1"/>

</bean>

Alt:

•<bean id=„bean1“ class=„a.b.Bean“

p.prop1=„value1“/>

Neu:

Page 15: Spring 2.0

Thorsten Kamann ● [email protected] 1515

Konfiguration: Modularisierung

• Beans - Konfiguration von Spring-Beans• Utils - Utilities wie Maps, Lists, Static Fields• JEE - J2EE Konfiguration, wie EJB, JNDI• Lang - Scriptsprachen (Groovy, JRuby, BeanShell)• Tx - Transaktionen• Aop - Aspekte• Tool - 3rd Party Erweiterungen

Konfiguration besteht aus verschiedenen Schemata

Page 16: Spring 2.0

Thorsten Kamann ● [email protected] 1616

Konfiguration: Erweiterungen

• 3rd Party Erweiterungen• Domänen-spezifische Konfigurationsdialekte• Tools-Schema unterstützt die Erstellung von

Erweiterungen• Einfaches Deployment mittels JAR

Erweiterbare Konfiguration

Page 17: Spring 2.0

Thorsten Kamann ● [email protected] 1717

• <beans>

<bean id=„marge“ class=„Person“ p:name=„marge“>

<property name=„husband“>

<bean class=„Person“ p:name=„homer“ p:age=„45“>

<property name=„props“>

<props>

<prop key=„overweight“>true</prop>

<prop key=„height“>1.8m</prop>

</props>

</property>

</bean>

</property>

<property name=„children“><list>…</list></property>

</bean>

<bean id=„bart“ …/>

<bean id=„lisa“ …/>

</beans>

Konfiguration: XML

Page 18: Spring 2.0

Thorsten Kamann ● [email protected] 1818

• @Configuration

public class MyConfig {

@Bean

public Person marge() {

Person marge = new Person();

Person husband = new Person();

marge.setName(„marge“);

marge.setHusband(husband);

marge.addCildren(bart);

return marge;

}

@Bean

public Person bart () {

Person bart = new Person();

return bart;

}

}

Konfiguration: Java

Page 19: Spring 2.0

Thorsten Kamann ● [email protected] 1919

• bb.beans {

marge(Person.class) {

name = "marge„

husband = { Person p ->

name = "homer„

age = 45

props = [overweight:true,

height:"1.8m"] }

children = [bart, lisa]

}

bart(Person.class) {}

lisa(Person.class) {}

}

Konfiguration: GroovyBuilder

Page 20: Spring 2.0

Thorsten Kamann ● [email protected] 2020

Konfiguration: Bean Scopes

• Singleton• Prototype• *Request (Web)• *Session (Web)• *Global Session (Portlets)

5 Bean Scopes

Page 21: Spring 2.0

Thorsten Kamann ● [email protected] 2121

AOP

Page 22: Spring 2.0

Thorsten Kamann ● [email protected] 2222

AOP: Allgemein

• SpringAOP ist einfacher und kann mit einfachen Beans arbeiten

• SpringAOP unterstützt zur Zeit nur Methoden-basierte Join Points

• AspectJ wird vollständig unterstützt und kann auch auf nicht-SpringBeans angewandt werden

SpringAOP vs AspectJ

Page 23: Spring 2.0

Thorsten Kamann ● [email protected] 2323

AOP: Konfiguration

• Annotations (@AspectJ) oder XML-basiert• Aktivierung von @AspectJ mit <aop:aspectj-

autoproxy/>• Pointcut-Definition mit AspectJ Expression-

Sprache• AOP-Autoproxies (default) oder CGLIB-

Proxies

Konfigurationsoptionen

Page 24: Spring 2.0

Thorsten Kamann ● [email protected] 2424

public class SimpleProfiler {

public Object profile(ProceedingJoinPoint call)

throws Throwable {

StopWatch clock = new StopWatch(

"Profiling for '" + call.toShortString() + "'");

try {

clock.start(call.toShortString());

return call.proceed();

} finally {

clock.stop();

System.out.println(clock.prettyPrint());

}

}

}

AOP: Beispiel (Java-Code)

Page 25: Spring 2.0

Thorsten Kamann ● [email protected] 2525

<bean id="profiler“ class=„d.it.s2.test.aop.SimpleProfiler" />

<aop:config>

<aop:aspect ref="profiler">

<aop:pointcut id="daoCreate"

expression="execution(* d.i.s.dao.*.create*(..))" />

<aop:around pointcut-ref="daoCreate" method="profile" />

</aop:aspect>

<aop:aspect ref="profiler">

<aop:pointcut id="daoSave"

expression="execution(* d.i.s2.dao.*.save*(..))" />

<aop:around pointcut-ref="daoSave" method="profile" />

</aop:aspect>

</aop:config>

AOP: Beispiel (Konfig. mit Schema)

Page 26: Spring 2.0

Thorsten Kamann ● [email protected] 2626

@Aspect

public class SimpleProfilerAnnotated {

@Pointcut

execution(* de.itemis.spring2.dao..create*(..))

public void create(){};

@Around(„create()“)

public Object profile(ProceedingJoinPoint call)

throws Throwable {

[…]

}

}

AOP: Beispiel (Annotations)

Page 27: Spring 2.0

Thorsten Kamann ● [email protected] 2727

<bean id="profiler“

class=„d.i.s2.test.aop.SimpleProfilerAnnotated" />

<aop:aspectj-autoproxy/>

AOP: Beispiel (Konfig. mit @AspectJ)

Page 28: Spring 2.0

Thorsten Kamann ● [email protected] 2828

Transaktionen

Page 29: Spring 2.0

Thorsten Kamann ● [email protected] 2929

Transaktionen:Übersicht

CallerAOP-Proxy

Transaction-Advisor

Custom Advisor(s)

Target

In: Create TransactionOut: Commit/Rollback

Proxyanstatt des Ziels

Vor oder nach dem Transaction-

Advisor

Business-Logik

Page 30: Spring 2.0

Thorsten Kamann ● [email protected] 3030

Transaktionen:Konfiguration

• XML-Schema (tx-Namensraum)• Annotations• Programmatisch• Intern wird AOP verwendet• Durch Verwendung von AspectJ Ausweitung

auf nicht-Spring-Objekte möglich

Konfiguration

Page 31: Spring 2.0

Thorsten Kamann ● [email protected] 3131

<bean id=„txManager“/>

<tx:advice id=„txAdvice“ transaction-manager=„txManager“>

<tx:attributes>

<tx:method name=„get*“ read-only=„true“/>

<tx:method name=„*“/>

</tx:attributes>

</tx:advice>

<aop:config>

<aop:pointcut id=„pid“ expression=„…“/>

<aop:advisor advice-ref=„txAdvice“ pointcut-ref=„pid“/>

</aop:config>

Transaktionen: Konfiguration (XML-Schema)

Page 32: Spring 2.0

Thorsten Kamann ● [email protected] 3232

@Transactional(readOnly = true)

public class DefaultFooService implements FooService {

public Foo getFoo(String fooName) {

}

@Transactional(readOnly = false,

propagation = Propagation.REQUIRES_NEW)

public void updateFoo(Foo foo) {

}

}

Transaktionen: Konfiguration (Annotations)

Page 33: Spring 2.0

Thorsten Kamann ● [email protected] 3333

<tx:annotation-driven transaction-manager="txManager"/>

<bean id="txManager"

class=„o.s.jdbc.datasource.DataSourceTransactionManager„

p:dataSource-ref=„dataSource“/>

Transaktionen: Konfiguration (Annotations)

Page 34: Spring 2.0

Thorsten Kamann ● [email protected] 3434

Spring Web MVC

Page 35: Spring 2.0

Thorsten Kamann ● [email protected] 3535

Spring Web MVC: Übersicht

• Trennung von Rollen(Controller, Validator, Command Object, Form Object, Model,…)

• Convention over Configuration• Unterstützung sämtlicher Spring Features• Eigene TagLibrary• Unterstützung einer großen Anzahl von Web-

Frameworks (JSP, JSF, Struts, Tapestry, WebWork, Velocity)

Features

Page 36: Spring 2.0

Thorsten Kamann ● [email protected] 3636

Spring Web MVC

• URL Controller/welcome/* WelcomeController

• Automatische Übergabe von Modellelementen an die View: de.itemis.modell.User ist als user in der View bekannt

• URL View/welcome.jsp

/WEB-INF/jsps/welcome.jsp

Convention over Configuration

Page 37: Spring 2.0

Thorsten Kamann ● [email protected] 3737

Spring Web MVC

• Seit Spring 2.0• Ermöglicht den direkten Zugriff auf Controller

und Command-Objekte• Vereinfacht die JSP‘s<form:form commandName="user">

<form:input path=„firstName“/>

</form:form>

Form TagLibrary

Page 38: Spring 2.0

Thorsten Kamann ● [email protected] 3838

Sonstiges

Page 39: Spring 2.0

Thorsten Kamann ● [email protected] 3939

Sonstiges: JPA

• Abstraktionsschicht für JPA• JPATemplate und JPADaoSupport arbeiten

gegen die „Plain JPA-API“• Einfache Arbeit mit verschiedenen JPA-

Implementierungen

JPA

Page 40: Spring 2.0

Thorsten Kamann ● [email protected] 4040

Sonstiges: JDBC

• NamedParameterJdbcTemplateString sql =

„SELECT * FROM C WHERE c.fn = :firstName“

anstatt

String sql =„SELECT * FROM C WHERE c.fn = ?“

• SimpleJdbcTemplate• Autoboxing• varargs

JDBC

Page 41: Spring 2.0

Thorsten Kamann ● [email protected] 4141

Sonstiges: Dynamische Sprachen

• Groovy, JRuby, BeanShell• Eigener Namespace für jede Sprache

• lang:groovy, lang:jruby, lang:bsh• Autom. Reloading

• refresh-check-delay="TIME_IN_MSEC"• Inline-Scripts• Grails ist eine Spring Web MVC Anwendung

Dynamische Sprachen

Page 42: Spring 2.0

Thorsten Kamann ● [email protected] 4242

Sonstiges: JMX

• Notification Mechanismus• NotificationListener• NotificationPublisher

• Kontrolle des Verhaltens bei der Registrierung im MbeanServer• REGISTRATION_FAIL_ON_EXISTING • REGISTRATION_IGNORE_EXISTING• REGISTRATION_REPLACE_EXISTING

JMX

Page 43: Spring 2.0

Thorsten Kamann ● [email protected] 4343

Sonstiges: Task Scheduler

• Abstraktionsschicht für das Konzept der Executors (Thread Pools in Java 5)

• Verfügbar auch für Java 1.3 und Java 1.4• Synchrone, asynchrone, zeitgesteuerte Tasks• Konfiguration über Beandefinitionen

<bean id="tE"

class="o.s.ThreadPoolTaskExecutor“/>

<bean ...>

<constructor-arg ref="tE" />

</bean>

Task Scheduler

Page 44: Spring 2.0

Thorsten Kamann ● [email protected] 4444

Sonstiges: Java5-Support

• Annotations• AOP, Transaktionen, Konfiguration• Verlagert die Konfiguration von XML nach

Java Vor- oder Nachteil?• Beispiele:<tx:annotation-driven

transaction-manager="txManager"/>

<aop:aspectj-autoproxy/>

• Generics

Java5-Support

Page 45: Spring 2.0

Thorsten Kamann ● [email protected] 4545

Sonstiges: Portlet MVC Framework

• Basiert auf den gleichen Konzepten wie das Spring Web MVC

• JSR-168 The Java Portlet Specification• Unterstützt Spring Webflow

Portlet MVC Framework

Page 46: Spring 2.0

Thorsten Kamann ● [email protected] 4646

Spring im Entwicklungsprozess

Page 47: Spring 2.0

Thorsten Kamann ● [email protected] 4747

Agiles und iteratives Vorgehen

• Agiles Vorgehen wird im Sinne von Flexibilität unterstützt

• Hohe Modularisierung möglich• Flexible Anpassung von Konfigurationen

Agil

• Die Konfiguration wächst mit der Software• Zusätzliche Features brauchen erst konfiguriert

werden, wenn die Implementierung existiert

Iterativ

Page 48: Spring 2.0

Thorsten Kamann ● [email protected] 4848

Modellgetriebene Entwicklung

• Konfigurationen sind einfach zu generieren• Annotations verringern die Menge an

generierten Codezeilen• Modularisierung ermöglicht manuelle

Anpassung des Generats• Erzeugung von Testhelpern und –stubs

beschleunigen die Erstellung von Tests

MDSD

Page 49: Spring 2.0

Thorsten Kamann ● [email protected] 4949

Unit-Test

• Dependency Injection fördert die Testbarkeitvon Systemen

• Austauschbare Konfiguration ermöglicht angepasste Konfiguration für Tests

• Integrationstests werden unterstützt• Tests selber können mit Spring konfiguriert

werden

Software-Tests

Page 50: Spring 2.0

Thorsten Kamann ● [email protected] 5050

Zusammenfassung

Page 51: Spring 2.0

Thorsten Kamann ● [email protected] 5151

Zusammenfassung

• Spring2 bietet viele sinnvolle Verbesserungen und Erweiterungen

• Die fast 100% Abwärtskompatibilität vereinfacht die Migration bestehender Anwendungen

• Durch die vollständige Integration von AOP lässt sich sehr bequem Funktionalität zu bestehendem Code hinzufügen

• Der Scriptsupport ermöglicht es, sehr dynamische Software zu bauen

Fazit

Page 52: Spring 2.0

Thorsten Kamann ● [email protected] 5252

Zusammenfassung

• Spring befindet sich auf dem Weg zu einer noch besseren Modularisierung

• Teile werden in Spring-Modules ausgelagert• Einbindung in 3rd-Party Produkte ist heute

schon problemlos möglich (z.B. Celtix – ein OS ESB)

• Spring Web MVC und Spring PortletFramework bieten eine sehr gute Basis für Webanwendungen (siehe Grails)

Ausblick

Page 53: Spring 2.0

Thorsten Kamann ● [email protected] 5353

Links

Page 54: Spring 2.0

Thorsten Kamann ● [email protected] 5454

• Springframework Webseitehttp://www.springframework.org

• Spring IDE (Eclipse Plugin)http://www.springide.org

• Grailshttp://www.grails.org/

• Thorsten Kamannhttp://www.thorsten-kamann.de

• Beispielprojekt mit Spring2, Hibernate und AOPhttp://thorque.wiki.com/Spring_2.0

Links


Recommended