54
Spring

Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Embed Size (px)

Citation preview

Page 1: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring

Page 2: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Services Spring Web Framework Integrating with Struts DAO and LDAP support

Page 3: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Overview

Spring is a Lightweight Application Framework

Spring Promotes loose coupling through Inversion of Control (IoC)

Spring comes with rich support for Aspect-Oriented Programming.

Page 4: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Overview “Lightweight Container”

Very loosely coupled Components widely reusable and

separately packaged Created by Rod Johnson

Based on “Expert one-on-one J2EE Design and Development”

Currently on version 1.1.1

Page 5: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Why Use Spring?

Wiring of components (Dependency Injection) Promotes/simplifies decoupling, design to

interfaces Declarative programming without J2EE Easily configured aspects, esp.

transaction support

Page 6: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Why Use Spring? Conversion of checked exceptions to

unchecked (Or is this a reason not to use it?)

Not an all-or-nothing solution Extremely modular and flexible

Well designed Easy to extend Many reusable classes

Page 7: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Architectural benefits Spring can effectively organize your middle tier objects,

whether or not you choose to use EJB.

Spring's configuration management services can be used in any architectural layer, in whatever runtime environment.

Spring can use AOP to deliver declarative transaction management without using an EJB container.

Page 8: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Architectural benefits Spring provides a consistent framework for data access,

whether using JDBC or an O/R mapping product such as TopLink, Hibernate

Spring provides a consistent, simple programming model in many areas JDBC, JMS, JavaMail, JNDI and many other important API’s.

Page 9: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Framework The Spring framework is a layered

architecture consisting of seven well-defined modules. The Spring modules are built on top of the core container, which defines how beans are created, configured and managed.

Page 10: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Framework

Page 11: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring FrameworkCore container Provides the essential functionality of the Spring framework.

Primary component of the core container is the BeanFactory, an implementation of the Factory pattern.

BeanFactory applies the Inversion of Control (IOC) pattern to separate an application's configuration and dependency specification from the actual application

code.

Page 12: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Framework

Spring context Spring context is a configuration file that provides

context information to the Spring framework. The Spring context includes enterprise services such as JNDI, EJB, e-mail, validation, and scheduling functionality.

Page 13: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Framework

Spring AOP The Spring AOP integrates aspect-oriented

functionality directly into the Spring framework.

Provides transaction management services for objects in any Spring-based application.

Incorporates declarative transaction management capabilities into applications without relying on EJB components.

Page 14: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring FrameworkSpring DAO

Spring JDBC DAO abstraction layer offers exception hierarchy for managing the exception handling and error messages thrown by different database vendors.

The exception hierarchy simplifies error handling and greatly reduces the amount of exception code you need to write, such as opening and closing connections.

Spring DAO's JDBC-oriented exceptions comply to its generic DAO exception hierarchy.

Page 15: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Framework

Spring ORM The Spring framework plugs into several ORM

frameworks to provide its Object Relational tool, including JDO and Hibernate.

All of these comply to Spring's generic transaction and DAO exception hierarchies.

Page 16: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Framework

Spring Web module The Web context module builds on top of the application

context module, providing contexts for Web-based applications.

The Web module also eases the tasks of handling multi-part requests and binding request parameters to domain objects.

Page 17: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring MVC framework

The Model-View-Controller (MVC) framework featured MVC implementation for building Web applications.

The MVC framework is highly configurable via strategy interfaces and accommodates numerous view technologies including JSP, Velocity, Tiles and iText.

Page 18: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Aspect Oriented Programming

Aspect-oriented programming, or AOP, is a programming technique that allows programmers to modularize crosscutting concerns, or behavior that cuts across the typical divisions of responsibility, such as logging and transaction management.

Page 19: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

BeanFactory Usage

InputStream is = new FileInputStream("beans.xml"); XmlBeanFactory factory = new XmlBeanFactory(is);MyBeanClass bean = (MyBeanClass)factory.getBean(“myBean”);

ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); MyBeanClass bean = (MyBeanClass)ctx.getBean(“myBean”);

OR

Page 20: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring Dependency Injection Inversion of Control (IoC) “Hollywood Principle”

Don't call me, I'll call you “Container” resolves (injects) dependencies

of components by setting implementation object (push)

As opposed to component instantiating or Service Locator pattern where component locates implementation (pull)

Martin Fowler calls Dependency Injection

Page 21: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Dependency Injection (cont'd)

BeanFactory configured components need have no Spring dependencies Simple JavaBeans

Beans are singletons by default Properties may be simple values or

references to other beans Built-in support for defining Lists,

Maps, Sets, and Properties collection types.

Page 22: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

XmlBeanFactory Example

Property and constructor based IoC<bean id="exampleBean" class="examples.ExampleBean"> <property name="beanOne"><ref bean="anotherExampleBean"/></property> <property name="beanTwo"><ref bean="yetAnotherBean"/></property> <property name="integerProperty">1</property></bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/><bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

<bean id="exampleBean" class="examples.ExampleBean"> <constructor-arg><ref bean="anotherExampleBean"/></constructor-arg> <constructor-arg><ref bean="yetAnotherBean"/></constructor-arg> <constructor-arg><value>1</value></constructor-arg></bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/><bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

Page 23: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Bean Creation Direct instantiation

<bean id=“beanId” class=“className”> BeanFactory instantiation

Same syntax but class is subclass of BeanFactory getObject() called to obtain Bean

Static Factory <bean id=“beanId” class=“className" factory-

method=" staticCreationMethod“> Instance Factory Method

<bean id=“beanId” factory-bean=“existingBeanId" factory-method=“nonStaticCreationMethod">

Page 24: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Autowiring Properties

Beans may be auto-wired (rather than using <ref>) Per-bean attribute autowire Explicit settings override

autowire=“name” Bean identifier matches property name

autowire=“type” Type matches other defined bean

autowire=”constructor” Match constructor argument types

autowire=”autodetect” Attempt by constructor, otherwise “type”

Page 25: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Web Initialization

Web applications may use ContextLoaderListener to initialize Spring

<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml </param-value> </context-param>

<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

web.xml

Automatically done by Spring DispatcherServlet

Page 26: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

ApplicationContext Example

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"><value>database.properties</value></property> </bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>${database.connection.driver_class}</value> </property> <property name="url"> <value>${database.connection.url}</value> </property></bean>

Page 27: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Spring AOP

Page 28: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

AOP Fundamentals

Aspect-oriented programming (AOP) provides for simplified application of cross-cutting concerns Transaction management Security Logging Auditing Locking

Page 29: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Transactions

Page 30: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

AOP Transactions

Spring provides AOP support for declarative transactions

Delegates to a PlatformTransactionManager instance DataSourceTransactionManager HibernateTransactionManager JdoTransactionManager JtaTransactionManager

Page 31: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Transaction Configuration

<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="dataSource"/></property> <property name="mappingResources"> <list> <value>com/../model/*.hbm.xml</value> </list> </property></bean>

<bean id="transactionManager” class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property></bean>

Page 32: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Declarative Transactions

Declarative transactional support can be added to any bean by using TransactionProxyFactoryBean

Similar to EJB, transaction attributes may be defined on a per-method basis

Page 33: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Injecting Transaction Support

<bean id=“reservationService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="target"><ref local=“reservationServiceTarget"/></property> <property name="transactionAttributes"> <props> <prop key=“reserveRoom*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean>

Declarative transaction support for single bean

Page 34: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Transaction Autoproxy

<bean id="autoproxy" class="org...DefaultAdvisorAutoProxyCreator"></bean>

<bean id="transactionAdvisor" class="org...TransactionAttributeSourceAdvisor" autowire="constructor" ></bean>

<bean id="transactionInterceptor" class="org...TransactionInterceptor" autowire="byType"> </bean>

<bean id="transactionAttributeSource" class="org...AttributesTransactionAttributeSource" autowire="constructor"></bean>

<bean id="attributes" class="org...CommonsAttributes"/>

Caches metadatafrom classes

Generic autoproxysupport

Applies transactionusing transactionManager

Invokes interceptorbased on attributes

Page 35: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Data Access

Page 36: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Data Access

DAO support provides pluggable framework for persistence

Currently supports JDBC, Hibernate, JDO, and iBatis

Defines consistent exception hierarchy (based on RuntimeException)

Provides abstract “Support” classes for each technology Template methods define specific queries

Page 37: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

DAO Support

The Data Access Object (DAO) support in Spring is primarily aimed at making it easy to work with data access technologies like JDBC, Hibernate or JDO in a standardized way.

Page 38: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

DAO Support

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="default" autowire="default" dependency-check="default">

<property name="jndiName"> <value>com.bt.bbv.r1oss</value> </property> </bean> <bean id="jdbcTemplate"

class="org.springframework.jdbc.core.JdbcTemplate" lazy-init="default" autowire="default" dependency-check="default">

<property name="dataSource"> <ref bean="dataSource" /> </property> </bean> </beans>

Page 39: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Hibernate DAO Example

public class ReservationDaoImpl extends HibernateDaoSupport implements ReservationDao {

public Reservation getReservation (Long orderId) { return (Reservation)getHibernateTemplate().load(Reservation .class, orderId); }

public void saveReservation (Reservation r) { getHibernateTemplate().saveOrUpdate(r); }

public void remove(Reservation Reservation) { getHibernateTemplate().delete(r); }

Page 40: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Hibernate DAO (cont’d)

public Reservation[] findReservations(Room room) { List list = getHibernateTemplate().find( "from Reservation reservation “ + “ where reservation.resource =? “ + “ order by reservation.start", instrument); return (Reservation[]) list.toArray(new Reservation[list.size()]);

Page 41: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Hibernate DAO (cont’d)

public Reservation[] findReservations(final DateRange range) { final HibernateTemplate template = getHibernateTemplate(); List list = (List) template.execute(new HibernateCallback() { public Object doInHibernate(Session session) { Query query = session.createQuery( "from Reservation r “ + “ where r.start > :rangeStart and r.start < :rangeEnd “); query.setDate("rangeStart", range.getStartDate() query.setDate("rangeEnd", range.getEndDate()) return query.list(); } }); return (Reservation[]) list.toArray(new Reservation[list.size()]); }}

Page 42: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Hibernate Example

<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="dataSource"/></property> <property name="mappingResources"> <list> <value>com/jensenp/Reservation/Room.hbm.xml</value> <value>com/jensenp/Reservation/Reservation.hbm.xml</value> <value>com/jensenp/Reservation/Resource.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto} </prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> </props> </property> </bean>

<bean id=“reservationDao" class="com.jensenp.Reservation.ReservationDaoImpl"> <property name="sessionFactory"><ref bean="sessionFactory"/> </property> </bean>

Page 43: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

JDBC Support

JDBCTemplate provides Translation of SQLExceptions to more

meaningful Spring Runtime exceptions Integrates thread-specific transactions

MappingSQLQuery simplifies mapping of ResultSets to Java objects

Page 44: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Web Framework

Page 45: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

DispatcherServlet

The DispatcherServlet is the Spring Front Controller

Initializes WebApplicationContext Uses /WEB-INF/[servlet-name]-

servlet.xml by default WebApplicationContext is bound

into ServletContext

Page 46: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

DispatcherServlet Configuration HandlerMapping

Routing of requests to handlers HandlerAdapter

Adapts to handler interface. Default utilizes Controllers

HandlerExceptionResolver Maps exceptions to error pages Similar to standard Servlet, but more flexible

ViewResolver Maps symbolic name to view

Page 47: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Dispatcher Servlet Configuration MultipartResolver

Handling of file upload LocaleResolver

Default uses HTTP accept header, cookie, or session

Page 48: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Controllers

Controller interface defines one method ModelAndView

handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception

ModelAndView consists of a view identifier and a Map of model data

Page 49: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Controller Implementations

CommandControllers bind parameters to data objects

AbstractCommandController AbstractFormController SimpleFormController WizardFormController

Page 50: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Integration with Struts

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  <set-property property="contextConfigLocation" value="/WEB-INF/spring/core/spring-advice.xml,/WEB-INF/spring/core/spring-dao.xml,/WEB-INF/spring/core/spring-email.xml,/WEB-INF/spring/core/spring-services.xml,/WEB-INF/spring/core/spring-tasks.xml,/WEB-INF/spring/core/spring-webservices.xml" />

</plug-in>

Page 51: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Integration with Struts

<bean id="CispWebService" class="com.bt.bbv.core.util.webservices.WebServiceProxyFactoryBean">

</property>- <property name="servicePrefix">   <value>CISP</value>   </property> <property name="wsdlDocumentUrl">  <value>classpath:com/btexact/cisp/api/CispApiEJB.wsdl</value> </property>- <property name="serviceInterface">

<value>com.bt.bbv.core.service.cisp.webservice.CispApiEJBPort</value> <property name="serviceName"><value>CispApiEJB</value> </property> <property name="portName">  <value>CispApiEJBPort</value> </property> <property

name="portInterface"><value>com.btexact.cisp.api.CispApiEJBPort</value></property> </bean>

Page 52: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Integration with LDAP

<public class TraditionalPersonDaoImpl implements PersonDao { public List getAllPersonNames() { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389/dc=example,dc=com");

DirContext ctx = new InitialDirContext(env); } catch (NamingException e) {

throw new RuntimeException(e); }

Page 53: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

Integration with EJB

<bean id="myComponent“ class="org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean">

<property name="jndiName" value="ejb/myBean"/> <property name="businessInterface" value="com.mycom.MyComponent"/> </bean>

Page 54: Spring. Spring Overview Spring Container Concepts Spring and AOP Spring and Data Access Managing Transactions and Resources Remoting and Accessing Enterprise

References

Spring’s homepage: http://www.springframework.org

“Introducing the Spring Framework” by Rod Johnson: http://theserverside.com/news/thread.jsp?thread_id=21893

“Inversion of control containers and dependency injection” by Martin Fowler: http://www.martinfowler.com/articles/injection.html

AOP Alliance: http://aopalliance.sourceforge.net