4. Einführung: Was ist Spring?
Spring ist eine Ansammlung von API's, die die Entwicklung mit der J2EE
vereinfacht
Spring ist ein Dependency Injection Container
Spring ist ein Programmiermodell für die Entwicklung
leichtgewichtiger Komponenten
lose gekoppelter Komponenten
vom Framework unabhängiger Komponenten
testbarer Komponenten
Spring konkurriert mit keinem bestehenden Framework, bietet allerdings eine
Integration an
Copyright 2006 Thorsten Kamann 4
5. Einführung: Leitsprüche
J2EE soll einfacher zu benutzen sein
Es ist besser gegen Interfaces zu programmieren als gegen konkrete Klassen
JavaBeans bieten eine hervorragende Möglichkeit Anwendungen zu
konfigurieren
OO-Design ist wichtiger als jede Implementierungstechnologie (z.B. J2EE)
Checked Exceptions werden in der J2EE zu häufig verwendet. Ein Framework
sollte den Entwickler nicht zwingen Exceptions zu behandeln, da er
wahrscheinlich nichts konkretes damit anfangen kann
Testing ist essenziell. Ein Framework sollte dem Entwickler das Testen so
einfach wie möglich machen
Copyright 2006 Thorsten Kamann 5
6. Einführung: Ziele
Spring soll Spaß machen
Der Anwendungscode soll nicht von Spring abhängig sein
Spring soll nicht mit bestehenden Frameworks konkurrieren, sondern eine
Integration anbieten (z.B. JDO, Toplink und Hibernate)
Copyright 2006 Thorsten Kamann 6
7. 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
Copyright 2006 Thorsten Kamann 7
8. Einführung: Features
Abstraktionsschicht für Transaktions-Management
Erweiterbares Transaktions-Management
Deklarative Konfiguration der Transaktionen ohne tief in das entsprechende
Framework einzusteigen
Generische Strategien für JTA und einfachen JDBC DataSource sind bereits
enthalten
Im Gegensatz zu reinem JTA oder EJB CMP ist dieses Transaktions-
Management nicht auf J2EE-Umgebungen beschränkt
Copyright 2006 Thorsten Kamann 8
9. 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
Copyright 2006 Thorsten Kamann 9
10. 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
Copyright 2006 Thorsten Kamann 10
11. 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
Copyright 2006 Thorsten Kamann 11
12. 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
Copyright 2006 Thorsten Kamann 12
13. Einführung: Features
Alle Features von Spring können sowohl innerhalb als auch außerhalb eines
J2EE-Container ausgeführt werden
Ein zentraler Fokus von Spring ist es, Business-Komponenten und DAO's die keine
spezifischen Services der J2EE verwenden, auch ohne J2EE-Container
verwenden zu können
Die Architektur von Spring ist sehr flexibel und sehr Low-Level angesiedelt
Die JavaBeans-Konfiguration kann ohne AOP und MVC-Framework benutzt
werden
Dagegen benutzt das MVC-Framework die JavaBeans-Konfiguration
Spring ist lauffähig ab Java 1.3. Erweiterte Funktionen, wie z.B. AOP und
Annotation erwarten eine höhere Java Version
Copyright 2006 Thorsten Kamann 13
15. Konfiguration: XML-Schemas
Spring Konfigurationen basieren auf XML-Schema
Aber es gibt immer noch eine DTD
Durch XML-Schema ist eine direktere Konfiguration möglich
alt:
<bean id=quot;simplequot; class=quot;o.s.jndi.JndiObjectFactoryBeanquot;>
<property name=quot;jndiNamequot; value=quot;jdbc/MyDataSourcequot;/>
</bean>
neu:
<jee:jndi-lookup id=quot;simplequot; jndi-name=quot;jdbc/MyDataSourcequot;/>
Dadurch kürzere und eindeutigere Konfigurationen
Copyright 2006 Thorsten Kamann 15
16. Konfiguration: Modularisierung der Konfiguration
Konfiguration wurde in verschiedene Module aufgeteilt
Beans – Konfiguration von Spring-Beans
Utils – Utilities wie Maps, Lists, Static Fields
JEE – J2EE Konfiguration, wie EJB, JNDI
Lang – Konfigurationen in anderen Sprachen (Groovy, JRuby, BeanShell)
Tx - Transaktionen
Aop - Aspekte
Tool – Schema für die Anbindung von 3rd Party Erweiterungen
Jedes Schema besitzt einen eindeutigen Namensraum
Copyright 2006 Thorsten Kamann 16
17. Konfiguration: Erweiterungen
Konfiguration ist erweiterbar, z.B. für
3rd Party Erweiterungen
Domänen spezifische Konfigurationsdialekte
Tools-Schema unterstützt die Erstellung von Erweiterungen
Einfaches Deployment mittels JAR
Copyright 2006 Thorsten Kamann 17
18. Konfiguration: Neue Bean Scopes
Spring unterstützt 5 Bean Scopes
Singleton
Prototype
Request
Session
Global Session
Request und Session sind nur bei Webanwendungen verfügbar
Global Session ist nur bei Portal Anwendungen verfügbar
Copyright 2006 Thorsten Kamann 18
20. AOP
Spring hat 2 AOP-Implementation: SpringAOP und AspectJ
SpringAOP ist einfacher und kann mit einfachen Beans arbeiten
AspectJ wird vollständig unterstützt und kann auch auf nicht-SpringBeans
angewandt werden
SpringAOP unterstützt zur Zeit nur Methoden-basierte Join Points
AOP-Autoproxies (default) oder CGLIB-Proxies können benutzen werden
Konfiguration von AOP kann mit Annotations (@AspectJ) oder XML-basiert
erfolgen
Aktivierung von @AspectJ erfolgt mit einem <aop:aspectj-autoproxy/>
Pointcuts können mit der AspectJ-typischen Expression-Sprache definiert
werden
Copyright 2006 Thorsten Kamann 20
21. AOP: Schema-basierter AOP Support
Bietet eine Alternative zu der Annotation-basierten Konfiguration, wenn kein
Java5 verwendet werden kann
Das AOP XML-Schema bietet XML-basierte Konfiguration von Aspekten, Advices
und Pointcuts
Expression-Sprache ist die gleiche wie bei den Annotations
<aop:config>
<aop:pointcut id=quot;dataAccessOperationquot;
expression=quot;execution (* com.xyz.myapp.dao.*.*(..))quot;/>
<aop:aspect id=quot;beforeExamplequot; ref=quot;aBeanquot;>
<aop:before pointcut-ref=quot;dataAccessOperationquot;
method=quot;doCheckquot;/>
</aop:aspect>
</aop:config>
Copyright 2006 Thorsten Kamann 21
23. Datenzugriffsschicht: Transaktionskonfiguration
Stellt ein konsistentes Programmiermodell für verschiedene Transaktions-API's
wie JPA, JTA, JDO, Hibernate, Toplink zur Verfügung
Unterstützt eine programmatische und deklarative Transaktionskonfiguration
Bietet ein vereinfachtes API für die programmatische Transaktionskonfiguration
Deklarative Transaktionskonfiguration benutzt ein eigenes XML-Schema mit dem
Namensraum tx
Die eigentliche Konfiguration der Transaktionsregeln erfolgt mit AOP
Dadurch können beliebige Objekte in die Transaktionsklammer aufgenommen
werden, auch nicht von Spring verwaltete Objekte
Spring unterstützt keine Remote-Transaktionen
Copyright 2006 Thorsten Kamann 23
25. Datenzugriffsschicht: Sonstige Neuerungen
Spring 2.0 besitzt eine Java Persistence API (JPA) Abstraktionsschicht. So ist es
einfach, eine beliebige JPA-Implementierung einzubinden
JPATemplate und JPADaoSupport arbeiten gegen die „Plain JPA-API“
Spring JMS unterstützt jetzt das Empfangen von asynchronen Nachrichten
Für JDBC bietet Spring ein NamedParameterTemplate. So können sprechende
Parameternamen in SQL-Abfragen anstatt der ? benutzt werden
Für die Arbeit mit Java5 gibt es ein SimpleJdbcTemplate, das die Arbeit mit
dem JdbcTemplate wesentlich vereinfacht
Copyright 2006 Thorsten Kamann 25
27. Web: Spring Web MVC
Es gibt eine neue Form-Taglibrary, mit der die Entwicklung von JSPs gegen das
Spring Web MVC wesentlich vereinfacht wird
Das erzeugte HTML ist HTML 4.01/XHTML 1.0
Die Tags bekommen Zugriff auf das Command-Objekt und die Daten, mit
denen der Controller arbeitet
Die JSPs werden dadurch wesentlich schlanker und besser wartbar
Beispiel:
<form:form>
<td><form:input path=quot;firstNamequot; /></td>
</form:form>
ergibt
<td><input type=“text“ value=“Karl Karlsonquot; /></td>
Copyright 2006 Thorsten Kamann 27
28. Web: Spring Web MVC
Convention over Configuration
Name des Controllers wird auf die Request-URL gemappt
WelcomeController --> /welcome*
Name der Modelelemente werden automatisch ermittelt und an die View
übergeben
x.y.User --> user
Automatisches Mapping der request-URL auf die logische View
http://localhost/register.jsp --> /WEB-INF/jsps/register.jsp
Copyright 2006 Thorsten Kamann 28
29. Unterstützung dynamischer Sprachen
Unterstützt werden Groovy, JRuby und BeanShell
Für den Support von dynamischen Sprachen gibt es ein eigenes XML-Schema mit
dem Namensraum lang
Jede unterstützte Sprache hat ein eigenes Element
<lang:jruby/>
<lang:groovy/>
<lang:bsh/>
Beans, die mit einer dieser Sprachen erstellt wurden, können automatisch
refreshed werden (Attribute refresh-check-delay=quot;TIME_IN_MSECquot;)
Inline-Scripts können direkt in der Spring-Konfigurationsdatei hinterlegt werden
Copyright 2006 Thorsten Kamann 29
30. Unterstützung dynamischer Sprachen - Szenarios
Scriptable Controller im Spring Web MVC
User-spezifische Controller während der Laufzeit erstellen
Schnell anpassbarer Code, da nur eine Textdatei geändert werden muss
Scripted Validators
Flexiblere Validatoren mit ungetypten Sprachen
Schnell anpassbarer Code
Ruby on Rails
Groovy on Rails (GRails)
Copyright 2006 Thorsten Kamann 30
32. JMX
Spring JMX unterstützt einen Notification Mechanismus
Eine beliebige Anzahl von NotificationListener für eine beliebige Anzahl
von MBeans sind konfigurierbar
Ein von Spring-MBean kann bei dem NotificationPublisher registriert
werden
Bessere Kontrolle des Verhaltens bei der Registrierung im MbeanServer
REGISTRATION_FAIL_ON_EXISTING
REGISTRATION_IGNORE_EXISTING
REGISTRATION_REPLACE_EXISTING
Copyright 2006 Thorsten Kamann 32
34. Task Scheduler
Der Task Scheduler bietet eine Abstraktionsschicht für das Konzept der
Executors (Thread Pools in Java 5)
Er stellt dieses Konzept auch für Umgebungen mit Java 1.3 und Java 1.4 zur
Verfügung und versteckt dabei die Implementierungsdetails zwischen den
einzelnen JDKs
Es werden synchrone, asynchrone und zeitgesteuerte Tasks unterstützt
Konfiguration erfolgt über einfache Beandefinitionen
<bean id=quot;taskExecutorquot; class=quot;org.sprin...ThreadPoolTaskExecutorquot;>
...
</bean>
<bean ...>
<constructor-arg ref=quot;taskExecutorquot; />
</bean>
Copyright 2006 Thorsten Kamann 34
36. Java5 Support
Es können Javav5 Annotations verwendet werden, um die XML-Konfiguration
schlank zu halten
Es gibt zur Zeit nur einige Annotations:
@Transactional
@AspectJ
@required
Wird eine Klasse mit @Transactional gekennzeichnet, verkürzt sich die
Konfiguration der Transaktionen, da sämtliche Informationen aus den Klassen
ausgelesen werden:
<tx:annotation-driven transaction-manager=quot;txManagerquot;/>
Copyright 2006 Thorsten Kamann 36
38. Zusammenfassung
Spring 2.0 ist vollständig abwärtskompatibel. Alte Konfigurationen können
weiter verwendet werden
Die grössten Änderungen in Spring 2.0 betreffen die Konfiguration
XML-Schema und die Aufteilung in verschiedene Module vereinfacht das
Handling mit der grossen Menge an Konfigurationsmöglichkeiten
Das voll integrierte AspectJ ist eine sehr mächtige Komponente, um Software-
Systeme zu instrumentieren
Der Support für dynamische Sprachen ermöglicht es, schnell und einfach
Anwendungen zu erweitern und „dynamischer“ zu machen
Der Task-Scheduler bietet eine gute Alternative zum komplexeren JMS-Support
(allerdings nur, wenn JMS dazu benutzt wird bestimmte Tasks anzustoßen)
Der Java5-Support bietet mit seinen Annotations eine schöne Möglichkeit,
spezifische Konfigurationen zurück in den Java-Code zu bringen
Copyright 2006 Thorsten Kamann 38
40. Links
Homepage des Springframeworks
http://www.springframework.org/
Dokumentation Spring 2.0
http://static.springframework.org/spring/docs/2.0.x/reference/index
.html
MyEclipse bietet eine sehr gute Spring-Integration (zur Zeit allerdings nur Spring
1.3.3)
http://www.myeclipse.org/
Spezialisten für Spring finden Sie unter
http://www.itemis.de
Webseite des Autors (mit Blog und Wiki)
http://www.planetes.de/thorsten-kamann/
Beispielanwendung mit Spring2, Hibernate und AOP
http://thorque.wiki.com/Spring_2.0/Getting_Started_mit_Spring2_und_
Hibernate
Copyright 2006 Thorsten Kamann 40