Seminar Software Engineering 1
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 2
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 3
Framework Grundlagen Framework Ein Framework ist eine Menge von kooperierenden Klassen, die einen wiederverwendbaren Entwurf für einen bestimmten Anwendungskontext vorgeben. Das Framework bestimmt dabei die Architektur der Applikation. Umkehrung des Kontrollflusses (Inversion of Control) Hollywood-Prinzip ( Don t call us, we call you ) 4
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 5
Spring OpenSource-Framework Grundlage: Buch "Expert One-On-One J2EE Design and Development von Rod Johnson Merkmale: Dependency Injection und AOP Module Quelle: http://static.springframework.org 6
Beispielanwendung Bibliothek 7
Beispielanwendung 8
Spring Bean Java- Klasse, welche über eine spezielle Konfiguration zur Spring Bean wird Beispiel: <!-- DataSource --> <bean id="datasource" class="org.springframework.jdbc.datasource. SingleConnectionDataSource"> <property name="driverclassname" value="com.mysql.jdbc.driver" /> <property name="url" value="jdbc:mysql://localhost/bib" /> <property name="username" value= sa" /> <property name="password" value= 123" /> </bean> 9
Spring Container erstellt, verbindet, konfiguriert und verwaltet alle Spring-Beans über deren kompletten Lebenszyklus Zwei Typen BeanFactory ApplicationContext BeanFactory factory = new XmlBeanFactory (new FileSystemResource("applicationContext.xml")); SampleBean samplebean = (SampleBean)factory.getBean("sampleBean"); 10
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 11
Dependency Injection Programmiertechnik um die Abhängigkeiten zwischen Objekten zu minimieren Übergabe der Verantwortung für die abhängige Objekten an das Framework Injizieren der Abhängigkeiten zur Laufzeit z. B. über XML-Datei 12
Dependency Injection Setter-Injection <bean id= Ex4711" class="bib.exemplar"> </bean> <property name="id" value="4711" /> <property name="book" ref="b4711" /> Constructor-Injection <bean id="ex4711" class="bib.exemplar"> <constructor-arg value="4711" /> <constructor-arg ref="b4711" /> </bean> 13
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 14
Aspektorientierte Programmierung Zur Vermeidung von Codewiederholungen Prinzip Separation of Concerns Auslagerung von sich wiederholenden Teilen: Aspekt Aspekte = Querschnittsbelange (Cross Cutting Concerns) In Spring: Nutzung via Proxy Joinpoint Stelle, an der in der Anwendung ein Aspekt eingebunden werden kann Pointcut Programmkonstrukt zur Auswahl von einem oder mehreren Joinpoints Wo wird der Aspekt ausgeführt? Advice Was wird wann ausgeführt? 15
Aspektorientierte Programmierung package aop; public class LoggingAdvice implements MethodInterceptor { public Object invoke(methodinvocation methodinvocation){ Log log; log = LogFactory.getLog(getClassName(methodInvocation)); log.info("class : " + getclassname(methodinvocation)); log.info("method : " + getmethodname(methodinvocation)); log.info("arguments : " + getarguments(methodinvocation));... //ausführen der eigentlichen Methode result = methodinvocation.proceed();... }... } Advice 16
Aspektorientierte Programmierung <!-Advice--> <bean id="logginginterceptor" class="aop.loggingadvice" /> AOP Konfiguration <! Pointcut--> <bean id="loggingpointcut" class="org.springframework.aop.support.jdkregexpmethodpointcut"> <property name="pattern" value="services.*" /> </bean> <! Advisor--> <bean id="loggingadvisor" class="org.springframework.aop.support.defaultpointcutadvisor"> <property name="advice" ref="logginginterceptor" /> <property name="pointcut" ref="loggingpointcut" /> </bean> 17
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 18
Datenbankanbindung Spring DAO Kapselung des Datenbankzugriffs durch Data Access Objects Verwendung des Template-Entwurfsmuster Quelle: [Wa08] 19
Datenbankanbindung DAO package jdbc; public class BookDAO extends JdbcDaoSupport implements IBookDao{ public List getall() { return (List) getjdbctemplate().query( "SELECT DESCRIPTION, ISBN, AUTOR, ID FROM Book ", new BookRowMapper()); } } <! DAO --> <bean id="bookdao" class="jdbc.bookdao"> <property name="jdbctemplate" ref="template" /> </bean> 20
JDBC-Anbindung <!-- Datenquelle --> <bean id="datasource" class= Datenbankanbindung "org.springframework.jdbc.datasource.singleconnectiondatasource"> <property name= driverclassname value= com.mysql.jdbc.driver /> <property name= url value= jdbc:mysql://localhost/bib /> <property name= username value= sa /> <property name= password value= 123 /> </bean> Datenquelle und Template <!-- JDBC Template --> <bean id="template" class="org.springframework.jdbc.core.jdbctemplate"> <property name="datasource" ref="datasource" /> <property name="nativejdbcextractor"> <bean class="org.springframework.jdbc.support.nativejdbc. CommonsDbcpNativeJdbcExtractor" /> </property> </bean> 21
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 22
Modell View Controller Spring MVC 2 1 3 4 Quelle: [Wa08] <bean name= /book.htm class= mvc.bookcontroller > <property name= bookservice ref= bookservice /> </bean> 23
Modell View Controller Controller package mvc; public class BookController extends AbstractController{ private BookService bookservice; private String view = "booklist"; public BookService getbookservice() { return bookservice; } public void setbookservice(bookservice bookservice) { this.bookservice = bookservice; } protected ModelAndView handlerequestinternal(httpservletrequest request, HttpServletResponse response) throws Exception { Map model = new HashMap(); model.put("books", bookservice.getbooks()); return new ModelAndView(view, model); } 24
Modell View Controller Spring MVC 6 5 <bean id="viewresolver" class=" InternalResourceViewResolver"> <property name="prefix" value="/web-inf/jsp/"/> <property name="suffix" value=".jsp"/> </bean> Ergebnis: /WEB-INF/jsp/booklist.jsp Quelle: [Wa08] 25
6 <%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> </head> <body> </body> </html> <h1>willkommen in der Bibliothek</h1><br> <h2>hier sehen Sie alle verfügbaren Bücher</h2><br> <table> </table> <tr><th>buch</th><th>autor</th></tr> <c:foreach items="${books}" var="book"> <tr> <td><c:out value="${book.description}"/></td> <td><c:out value="${book.autor}"/></td> <td><c:out value="${book.isbn}"/></td> </tr> </c:foreach> Modell View Controller View 26
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 27
Authentifizierung und Autorisierung auf Webanfrage- und Methodenaufrufebene Spring Security nutzt dafür DI und AOP Sicherheit Authentification-Managers überprüft den Benutzernamen und das Passwort Access-Decision-Manager prüft die Benutzerrechte Spring Security 28
Sicherheit Authentifizierung Quelle: [Wa08] 30
Sicherheit Autorisierung Aufruf einer geschützten Methode 34
Sicherheit <bean id="securityinterceptor" class="org.springframework.security. <property name="authenticationmanager"> method.aopalliance.methodsecurityinterceptor"> <ref bean="authenticationmanager"/> </property> <property name="accessdecisionmanager"> <ref bean="accessdecisionmanager"/> </property> <property name="objectdefinitionsource"> <value> services.bookservice.getbooks*=role_user services.lendingservice.getlendings*=role_user services.userservice.getusers*=role_admin services.lendingservice.deletebyid*=role_admin services.lendingservice.save*=role_admin </value> </property> </bean> Autorisierung 35
<!--AutoProxy--> <bean id="autoproxycreator" class="org.springframework.aop. framework.autoproxy.beannameautoproxycreator"> <property name="interceptornames"> <list> <value>securityinterceptor</value> </list> </property> <property name="beannames"> <list> <value>bookservice</value> <value>lendingservice</value> <value>userservice</value> <value>exemplarservice</value> </list> </property> </bean> Sicherheit Autorisierung 36
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 37
Vergleich Spring und Java EE Spring als Lightweight-Modell zu Java EE Dependency Injection AOP Wird von beiden unterstützt In Java EE nur für Java EE Elemente wie EJB, Servlets Konfiguration Spring: Deskriptoren Java EE: Annotationen Spring: Grundfunktionalität Java EE: Interceptor-Konzept für EJB 3.0 Java EE ist ein Standard 38
Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung 39
Zusammenfassung und Ausblick Spring DI und AOP Datenbankanbindung MVC Sicherheit Ausblick Gute Dokumentation von Spring verfügbar Bücher und Webseiten Weiterentwicklung und Unterstützung 40
Vielen Dank für die Aufmerksamkeit! 41