4. Einführung: Was ist Spring?
IoC Ansammlung
(Dependency
von API‘s
Injection)
Programmiermodell
Thorsten Kamann ● thorsten.kamann@itemis.de 4
5. Einführung: Spring Komponenten
Spring Core
The IoC Container
AOP Web
JEE
Spring AOP Spring Web MVC
JMX
AspectJ Integration Struts
JMS
WebWork
JCA
Tapestry
Remoting
DAO ORM JSF
EJB‘s
Spring JDBC Hibernate PDF
Email
Transaction JPA Jasper Reports
Management TopLink Excel
JDO Spring Portlet MVC
Thorsten Kamann ● thorsten.kamann@itemis.de 5
6. Einführung: Features
Leichtgewichtiger Container
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 6
7. Einführung: Features
Abstraktionsschicht für Transaktions-
Management
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 7
8. Einführung: Features
Abstraktionsschicht für reines JDBC
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 8
9. Einführung: Features
Integration von populären O/R-Mappern
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 9
10. Einführung: Features
AOP Funktionalität
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 10
11. Einführung: Features
Flexibles MVC-Webapplication
Framework
• Benutzt die Spring-Core Funktionalitäten
• Sehr konfigurierbar durch verschiedene
Strategie-Interfaces
• Kombinierbar mit den verschiedensten
Viewtechnologien:
• JSP, Velocity, Tiles, iText, POI
Thorsten Kamann ● thorsten.kamann@itemis.de 11
13. Konfiguration: XML-Schema
Konfiguration per XML-Schema
• Spring Konfigurationen basieren auf XML-
Schema
• Durch XML-Schema ist eine direktere
Konfiguration möglich
• Dadurch kürzere und eindeutigere
Konfigurationen
Thorsten Kamann ● thorsten.kamann@itemis.de 13
18. Konfiguration: Java
• @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;
}
}
Thorsten Kamann ● thorsten.kamann@itemis.de 18
19. Konfiguration: GroovyBuilder
• bb.beans {
marge(Person.class) {
name = quot;marge„
husband = { Person p ->
name = quot;homer„
age = 45
props = [overweight:true,
height:quot;1.8mquot;] }
children = [bart, lisa]
}
bart(Person.class) {}
lisa(Person.class) {}
}
Thorsten Kamann ● thorsten.kamann@itemis.de 19
22. AOP: Allgemein
SpringAOP vs AspectJ
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 22
23. AOP: Konfiguration
Konfigurationsoptionen
• Annotations (@AspectJ) oder XML-basiert
• Aktivierung von @AspectJ mit <aop:aspectj-
autoproxy/>
• Pointcut-Definition mit AspectJ Expression-
Sprache
• AOP-Autoproxies (default) oder CGLIB-
Proxies
Thorsten Kamann ● thorsten.kamann@itemis.de 23
24. AOP: Beispiel (Java-Code)
public class SimpleProfiler {
public Object profile(ProceedingJoinPoint call)
throws Throwable {
StopWatch clock = new StopWatch(
quot;Profiling for 'quot; + call.toShortString() + quot;'quot;);
try {
clock.start(call.toShortString());
return call.proceed();
} finally {
clock.stop();
System.out.println(clock.prettyPrint());
}
}
}
Thorsten Kamann ● thorsten.kamann@itemis.de 24
35. Spring Web MVC: Übersicht
Features
• 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)
Thorsten Kamann ● thorsten.kamann@itemis.de 35
36. Spring Web MVC
Convention over Configuration
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 36
37. Spring Web MVC
Form TagLibrary
• Seit Spring 2.0
• Ermöglicht den direkten Zugriff auf Controller
und Command-Objekte
• Vereinfacht die JSP‘s
<form:form commandName=quot;userquot;>
<form:input path=„firstName“/>
</form:form>
Thorsten Kamann ● thorsten.kamann@itemis.de 37
39. Sonstiges: JPA
JPA
• Abstraktionsschicht für JPA
• JPATemplate und JPADaoSupport arbeiten
gegen die „Plain JPA-API“
• Einfache Arbeit mit verschiedenen JPA-
Implementierungen
Thorsten Kamann ● thorsten.kamann@itemis.de 39
40. Sonstiges: JDBC
JDBC
• NamedParameterJdbcTemplate
String sql =
„SELECT * FROM C WHERE c.fn = :firstName“
anstatt
String sql =
„SELECT * FROM C WHERE c.fn = ?“
• SimpleJdbcTemplate
• Autoboxing
• varargs
Thorsten Kamann ● thorsten.kamann@itemis.de 40
41. Sonstiges: Dynamische Sprachen
Dynamische Sprachen
• Groovy, JRuby, BeanShell
• Eigener Namespace für jede Sprache
• lang:groovy, lang:jruby, lang:bsh
• Autom. Reloading
• refresh-check-delay=quot;TIME_IN_MSECquot;
• Inline-Scripts
• Grails ist eine Spring Web MVC Anwendung
Thorsten Kamann ● thorsten.kamann@itemis.de 41
42. Sonstiges: JMX
JMX
• Notification Mechanismus
• NotificationListener
• NotificationPublisher
• Kontrolle des Verhaltens bei der
Registrierung im MbeanServer
• REGISTRATION_FAIL_ON_EXISTING
• REGISTRATION_IGNORE_EXISTING
• REGISTRATION_REPLACE_EXISTING
Thorsten Kamann ● thorsten.kamann@itemis.de 42
43. Sonstiges: Task Scheduler
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=quot;tEquot;
class=quot;o.s.ThreadPoolTaskExecutor“/>
<bean ...>
<constructor-arg ref=quot;tEquot; />
</bean>
Thorsten Kamann ● thorsten.kamann@itemis.de 43
44. Sonstiges: Java5-Support
Java5-Support
• Annotations
• AOP, Transaktionen, Konfiguration
• Verlagert die Konfiguration von XML nach
Java Vor- oder Nachteil?
• Beispiele:
<tx:annotation-driven
transaction-manager=quot;txManagerquot;/>
<aop:aspectj-autoproxy/>
• Generics
Thorsten Kamann ● thorsten.kamann@itemis.de 44
45. Sonstiges: Portlet MVC Framework
Portlet MVC Framework
• Basiert auf den gleichen Konzepten wie das
Spring Web MVC
• JSR-168 The Java Portlet Specification
• Unterstützt Spring Webflow
Thorsten Kamann ● thorsten.kamann@itemis.de 45
46. Spring im
Entwicklungsprozess
Thorsten Kamann ● thorsten.kamann@itemis.de 46
47. Agiles und iteratives Vorgehen
Agil
• Agiles Vorgehen wird im Sinne von Flexibilität
unterstützt
• Hohe Modularisierung möglich
• Flexible Anpassung von Konfigurationen
Iterativ
• Die Konfiguration wächst mit der Software
• Zusätzliche Features brauchen erst konfiguriert
werden, wenn die Implementierung existiert
Thorsten Kamann ● thorsten.kamann@itemis.de 47
48. Modellgetriebene Entwicklung
MDSD
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 48
49. Unit-Test
Software-Tests
• Dependency Injection fördert die Testbarkeit
von Systemen
• Austauschbare Konfiguration ermöglicht
angepasste Konfiguration für Tests
• Integrationstests werden unterstützt
• Tests selber können mit Spring konfiguriert
werden
Thorsten Kamann ● thorsten.kamann@itemis.de 49
51. Zusammenfassung
Fazit
• 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
Thorsten Kamann ● thorsten.kamann@itemis.de 51
52. Zusammenfassung
Ausblick
• 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 Portlet
Framework bieten eine sehr gute Basis für
Webanwendungen (siehe Grails)
Thorsten Kamann ● thorsten.kamann@itemis.de 52