SlideShare uma empresa Scribd logo
1 de 57
Spring

    Paul Jensen
    Principal, Object Computing Inc.
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
Why Use Spring?
   Wiring of components (Dependency Injection)
       Promotes/simplifies decoupling, design to interfaces, TDD
   Declarative programming without J2EE
       Easily configured aspects, esp. transaction support
   Simplify use of popular technologies
       Abstractions insulate application from specifics, eliminate
        redundant code, and handle common error conditions
       Underlying technology specifics still accessible (closures)
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
Spring Framework
Spring Application
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
Dependency Injection Variants
   Variations on dependency injection
       Interface based (Avalon)
       Constructor-based (PicoContainer, Spring)
       Setter-based (Spring)
   BeanFactory provides configuration framework to
    initialize and “wire” JavaBeans
       org.springframework.beans and
        org.springframework.context
   Typically use the XmlBeanFactory, employing XML
    configuration files
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.
      Custom PropertyEditors may be defined to
        convert string values to other, arbitrary types.
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"/>
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">
Bean Creation
   Beans may be singletons or “prototypes”
       Attribute singleton=“false” causes instantiation
        with each getBean() lookup
       Singleton is default
   XmlBeanFactory pre-instantiates singletons
       May be overridden on per-instance basis by lazy-
        init=“true”
   Beans may also be marked abstract, allowing
    reuse of attribute values through inheritance
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”
Dependency Checking
   Ensures properties are defined
      Per-bean attribute dependency-check
      None required by default
      Verifies autowiring succeeded
   “simple”
      all but collaborators
   “object”
      collaborators only
   “all”
      Collaborators, primitive types, and collections
Lifecycle Customization
   Can define init method called after properties set
       init-method=”<method-name>”
   Can define destroy method as shutdown hook
       destroy-method=”<method-name>”
   May alternatively implement InitializingBean
    and/or DisposableBean
       At cost of Spring dependency
BeanFactory Miscellany
   BeanFactoryAware interface provides BeanFactory for
    bean
       setBeanFactory(BeanFactory)
   BeanNameAware interface provides bean name
       setBeanName(String)
   FactoryBean for beans which are themselves factories
       Object getObject()
       Boolean isSingleton()
       Class getObjectType()
BeanFactory Usage

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


                               OR
ApplicationContext ctx = new
ClassPathXmlApplicationContext("beans.xml");
MyBeanClass bean = (MyBeanClass)ctx.getBean(“myBean”);
ApplicationContext
   Extends functionality of BeanFactory
   Pre-instantiates singleton beans
   Detects and registers BeanPostProcessors and
    BeanFactoryPostProcessors
   Supports nesting of contexts
   ApplicationListener and ApplicationEvents
       Initialized and closed predefined
       Custom may be created
   MessageSource provides i18n messaging
       <bean id=”messageSource”
        class=”...ResourceBundleMessageSource”/>
       Contains list of bundle base names
Web Initialization
      Web applications may use
       ContextLoaderListener to initialize Spring
                                      web.xml
<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>


           Automatically done by Spring DispatcherServlet
Specialized Beans
   MethodInvokingFactoryBean
       Invokes method on registered beans or any static
        methods
       Stores return value
   SingletonBeanFactoryLocator and
    ContextSingletonBeanFactoryLocator
       Useful for sharing BeanFactories
       Eliminate duplication of beans in multiple similar
        factories or contexts
ApplicationContext customization
   Defined beans inheriting from
    BeanFactoryPostProcessor are detected and invoked
   CustomEditorConfigurer
      Registers custom PropertyEditors for converting
        configuration string values to specific types
   AutoProxyCreators
       Wrap beans in proxies based on various criteria (name,
        metadata, etc)
   PropertyResourceConfigurer
            Sets from property file and/or system properties
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>
Spring AOP
AOP Fundamentals
   Aspect-oriented programming (AOP) provides for
    simplified application of cross-cutting concerns
       Transaction management
       Security
       Logging
       Auditing
       Locking
   AOP sometimes (partially) achieved via Decorators or
    Proxies
       CORBA Portable Interceptors
       Servlet Filters
AOP Fundamentals
   Aspect - Implementation of a cross-cutting concern.
      Spring Advisors or Interceptors
   Joinpoint - Execution point to target
      Typically, methods
   Advice - Action taken at a particular joinpoint.
   Pointcut - A set of joinpoints specifying where advice
    should be applied (e.g. Regular expression)
   Introduction/Mixin - Adding methods or fields to an
    advised class.
   Weaving - Assembling aspects into advised objects.
Spring AOP
   Generally, applies aspects to beans using BeanFactory
      Uses Dynamic Proxies if interface available
        otherwise CGLIB
      CGLIB creates derived class which proxies requests
          Bean class may not be final

   Less capable than AspectJ
      does not have field interception
       only runtime weaving solution is available
       Closer integration with AspectJ anticipated
Spring Pointcuts
   Pointcut applicability to a class may be evaluated
    statically or dynamically
   Spring only creates proxies where necessary
       public interface Pointcut {
         ClassFilter getClassFilter();
         MethodMatcher getMethodMatcher();
       }
       public interface ClassFilter {
         boolean matches(Class clazz);
       }
Pointcuts (cont'd)
     Pointcut may be statically or dynamically
      evaluated based on isRuntime()
     Abstract class StaticMethodMatcherPointcut
      requires override of 1st method only
public interface MethodMatcher {
  boolean matches(Method m, Class targetClass);
  boolean isRuntime();
  boolean matches(Method m, Class targetClass, Object[] args);
}
                        Only called if isRuntime() == true
Pointcuts (cont'd)
   Spring predefined pointcuts
       In org.springframework.aop.support package
   RegexpMethodPointcut
      Union of multiple regular expressions
      Uses Jakarta ORO package
   ControlFlowPointcut
      Similar to AspectJ cflow
      Applied if call stack includes specific class and, optionally,
        method
   UnionPointcut
      Merges pointcuts
Spring Advice
    Can have per-class or per-instance Advice
    Spring provides several Advice types
    Around Advice
              AOP Alliance compliant
              Must call invocation.proceed() to call target

    public class MyAdvice implements AroundAdvice {
      Object invoke(MethodInvocation invocation) {
        // change arguments, start transaction, lock, etc.
        invocation.proceed();
        // change return value, stop transaction, unlock,etc.
      }
    }
Spring Advice
   MethodBeforeAdvice
       void before(Method m, Object[] args, Object target)
       Cannot alter return type
   ThrowsAdvice
       Marker interface
       Implementors define methods of form:
            afterThrowing([Method], [args], [target], subclassOfThrowable)
   AfterReturningAdvice
       void afterReturning(Object returnValue, Method, m,
        Object[] args, Object target)
       Cannot modify return value
Spring Advice
    IntroductionInterceptor provides ability to define
     mixins
public class RollbackAdvice extends DelegatingIntroductionInterceptor
                        implements RollbackSupport {
  Map map = new HashMap();

    void rollback(Date date) {
      // rollback to state at given time
    }

    public Object invoke(MethodInvocation invocation) {
      // record change and time of change
    }
}
Injecting Advice
 <bean id=“meetingTarget" class=“ex.DefaultMeeting“
     singleton=“false”>
   <property name=“topic">Spring</property>
 </bean>

 <bean id="myAdvisor" class=“ex.RollbackAdvice"
     singleton=”false”>
 </bean>

 <bean id="debugInterceptor"
   class="org.springframework.aop.interceptor.DebugInterceptor">
 </bean>
Injecting Advice (cont'd)
<bean id=“meeting"
  class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces">                  All methods
     <value>ex.Meeting</value>                       using CGLib
  </property>                                        if none defined
  <property name="target"><ref local=“meetingTarget"/></property>

  <property name="interceptorNames">
    <list>                                  Advisors applied in order
       <value>myAdvisor</value>
       <value>debugInterceptor</value>
    </list>
  </property>
</bean>
Autoproxying
   Autoproxy bean definitions automatically proxy
    selected beans.
   BeanNameAutoProxyCreator
      Adds listed advisors/interceptors to beans
        with names matching regular expression
   DefaultAdvisorAutoProxyCreator
      Generic autoproxy infrastructure support
      Applies all advisors defined in the context to
        all beans, proxying appropriately
Metadata support
   Spring supports obtaining meta data Object
    attributes at class, method, and field level
       Not yet argument level (as JSR-175)
   Currently supports Jakarta Commons Attributes
   Support for JSR-175 in work
   Metadata support provided via Attributes
    interface
       Amenable to mocking unlike JDK reflection and
        Commons static methods
Metadata autoproxying
   Configuration of autoproxying based on metadata
    attributes simplifies configuration
       Define custom attribute class
       Define Advisor with pointcut based on custom attribute
       Add Advisor in ApplicationContext with autoproxy
   Examples
       Transaction Attributes
       Security Attributes
       Pooling
       Mapping of controllers to URLs
Transactions
AOP Transactions
   Spring provides AOP support for declarative
    transactions
   Delegates to a PlatformTransactionManager
    instance
       DataSourceTransactionManager
       HibernateTransactionManager
       JdoTransactionManager
       JtaTransactionManager
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>
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
   Also allows definition of pre- and post-
    interceptors (e.g. for security)
Injecting Transaction Support
            Declarative transaction support for single bean

<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>
Transaction Autoproxy
<bean id="autoproxy"                                  Generic autoproxy
  class="org...DefaultAdvisorAutoProxyCreator">
</bean>                                               support

<bean id="transactionAdvisor"
  class="org...TransactionAttributeSourceAdvisor"     Invokes interceptor
  autowire="constructor" >                            based on attributes
</bean>

<bean id="transactionInterceptor"                     Applies transaction
  class="org...TransactionInterceptor"
  autowire="byType">                                  using transactionManager
</bean>

<bean id="transactionAttributeSource"                 Caches metadata
 class="org...AttributesTransactionAttributeSource"   from classes
 autowire="constructor">
</bean>

<bean id="attributes"
   class="org...CommonsAttributes"
/>
Data Access
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
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);
   }
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()]);
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()]);
   }
 }
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>
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
Web Framework
DispatcherServlet
   The DispatcherServlet is the Spring Front
    Controller
   Initializes WebApplicationContext
   Uses /WEB-INF/[servlet-name]-servlet.xml by
    default
   WebApplicationContext is bound into
    ServletContext
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
Dispatcher Servlet Configuration
   MultipartResolver
       Handling of file upload
   LocaleResolver
       Default uses HTTP accept header, cookie, or
        session
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
Controller Implementations
   CommandControllers bind parameters to data
    objects
   AbstractCommandController
   AbstractFormController
   SimpleFormController
   WizardFormController
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

Mais conteúdo relacionado

Mais procurados

Different Types of Containers in Spring
Different Types of Containers in Spring Different Types of Containers in Spring
Different Types of Containers in Spring Sunil kumar Mohanty
 
Spring training
Spring trainingSpring training
Spring trainingshah_d_p
 
02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questionsDhiraj Champawat
 
Ejb3.1 for the starter
Ejb3.1 for the starterEjb3.1 for the starter
Ejb3.1 for the startershohancse
 
Spring dependency injection
Spring dependency injectionSpring dependency injection
Spring dependency injectionsrmelody
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Fahad Golra
 
Spring training
Spring trainingSpring training
Spring trainingTechFerry
 
Dependency Injection in Spring in 10min
Dependency Injection in Spring in 10minDependency Injection in Spring in 10min
Dependency Injection in Spring in 10minCorneil du Plessis
 
Enterprise java beans(ejb)
Enterprise java beans(ejb)Enterprise java beans(ejb)
Enterprise java beans(ejb)vikram singh
 
Enterprise java beans(ejb) update 2
Enterprise java beans(ejb) update 2Enterprise java beans(ejb) update 2
Enterprise java beans(ejb) update 2vikram singh
 
Integration Of Springs Framework In Hibernates
Integration Of Springs Framework In HibernatesIntegration Of Springs Framework In Hibernates
Integration Of Springs Framework In HibernatesSunkara Prakash
 
Spring Web Views
Spring Web ViewsSpring Web Views
Spring Web ViewsEmprovise
 

Mais procurados (18)

Different Types of Containers in Spring
Different Types of Containers in Spring Different Types of Containers in Spring
Different Types of Containers in Spring
 
Spring training
Spring trainingSpring training
Spring training
 
Spring Basics
Spring BasicsSpring Basics
Spring Basics
 
02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions
 
EJB .
EJB .EJB .
EJB .
 
Spring
SpringSpring
Spring
 
Ejb3.1 for the starter
Ejb3.1 for the starterEjb3.1 for the starter
Ejb3.1 for the starter
 
Spring dependency injection
Spring dependency injectionSpring dependency injection
Spring dependency injection
 
Ejb3 Presentation
Ejb3 PresentationEjb3 Presentation
Ejb3 Presentation
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2
 
Sel study notes
Sel study notesSel study notes
Sel study notes
 
Spring training
Spring trainingSpring training
Spring training
 
Dependency Injection in Spring in 10min
Dependency Injection in Spring in 10minDependency Injection in Spring in 10min
Dependency Injection in Spring in 10min
 
Enterprise java beans(ejb)
Enterprise java beans(ejb)Enterprise java beans(ejb)
Enterprise java beans(ejb)
 
Enterprise java beans(ejb) update 2
Enterprise java beans(ejb) update 2Enterprise java beans(ejb) update 2
Enterprise java beans(ejb) update 2
 
Integration Of Springs Framework In Hibernates
Integration Of Springs Framework In HibernatesIntegration Of Springs Framework In Hibernates
Integration Of Springs Framework In Hibernates
 
J2EE jsp_01
J2EE jsp_01J2EE jsp_01
J2EE jsp_01
 
Spring Web Views
Spring Web ViewsSpring Web Views
Spring Web Views
 

Semelhante a Spring talk111204

Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depthVinay Kumar
 
EJB 3.0 Walkthrough (2006)
EJB 3.0 Walkthrough (2006)EJB 3.0 Walkthrough (2006)
EJB 3.0 Walkthrough (2006)Peter Antman
 
Integration of Backbone.js with Spring 3.1
Integration of Backbone.js with Spring 3.1Integration of Backbone.js with Spring 3.1
Integration of Backbone.js with Spring 3.1Michał Orman
 
Spring from a to Z
Spring from  a to ZSpring from  a to Z
Spring from a to Zsang nguyen
 
Skillwise-Spring framework 1
Skillwise-Spring framework 1Skillwise-Spring framework 1
Skillwise-Spring framework 1Skillwise Group
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring FrameworkRajind Ruparathna
 
Spring review_for Semester II of Year 4
Spring review_for Semester II of Year 4Spring review_for Semester II of Year 4
Spring review_for Semester II of Year 4than sare
 
Spring IOC and DAO
Spring IOC and DAOSpring IOC and DAO
Spring IOC and DAOAnushaNaidu
 
Spring introduction
Spring introductionSpring introduction
Spring introductionLê Hảo
 
Toms introtospring mvc
Toms introtospring mvcToms introtospring mvc
Toms introtospring mvcGuo Albert
 
Spring 3.1: a Walking Tour
Spring 3.1: a Walking TourSpring 3.1: a Walking Tour
Spring 3.1: a Walking TourJoshua Long
 
Spring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSpring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSam Brannen
 

Semelhante a Spring talk111204 (20)

Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depth
 
EJB 3.0 Walkthrough (2006)
EJB 3.0 Walkthrough (2006)EJB 3.0 Walkthrough (2006)
EJB 3.0 Walkthrough (2006)
 
Integration of Backbone.js with Spring 3.1
Integration of Backbone.js with Spring 3.1Integration of Backbone.js with Spring 3.1
Integration of Backbone.js with Spring 3.1
 
Spring from a to Z
Spring from  a to ZSpring from  a to Z
Spring from a to Z
 
Spring introduction
Spring introductionSpring introduction
Spring introduction
 
Skillwise-Spring framework 1
Skillwise-Spring framework 1Skillwise-Spring framework 1
Skillwise-Spring framework 1
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Spring core
Spring coreSpring core
Spring core
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Spring
SpringSpring
Spring
 
Spring
SpringSpring
Spring
 
Spring review_for Semester II of Year 4
Spring review_for Semester II of Year 4Spring review_for Semester II of Year 4
Spring review_for Semester II of Year 4
 
Spring IOC and DAO
Spring IOC and DAOSpring IOC and DAO
Spring IOC and DAO
 
Spring beans
Spring beansSpring beans
Spring beans
 
Spring introduction
Spring introductionSpring introduction
Spring introduction
 
Toms introtospring mvc
Toms introtospring mvcToms introtospring mvc
Toms introtospring mvc
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
JBoss AS7 OSDC 2011
JBoss AS7 OSDC 2011JBoss AS7 OSDC 2011
JBoss AS7 OSDC 2011
 
Spring 3.1: a Walking Tour
Spring 3.1: a Walking TourSpring 3.1: a Walking Tour
Spring 3.1: a Walking Tour
 
Spring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSpring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing Support
 

Último

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 

Último (20)

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 

Spring talk111204

  • 1. Spring Paul Jensen Principal, Object Computing Inc.
  • 2. 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
  • 3. Why Use Spring?  Wiring of components (Dependency Injection)  Promotes/simplifies decoupling, design to interfaces, TDD  Declarative programming without J2EE  Easily configured aspects, esp. transaction support  Simplify use of popular technologies  Abstractions insulate application from specifics, eliminate redundant code, and handle common error conditions  Underlying technology specifics still accessible (closures)
  • 4. 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
  • 7. 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
  • 8. Dependency Injection Variants  Variations on dependency injection  Interface based (Avalon)  Constructor-based (PicoContainer, Spring)  Setter-based (Spring)  BeanFactory provides configuration framework to initialize and “wire” JavaBeans  org.springframework.beans and org.springframework.context  Typically use the XmlBeanFactory, employing XML configuration files
  • 9. 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.  Custom PropertyEditors may be defined to convert string values to other, arbitrary types.
  • 10. 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"/>
  • 11. 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">
  • 12. Bean Creation  Beans may be singletons or “prototypes”  Attribute singleton=“false” causes instantiation with each getBean() lookup  Singleton is default  XmlBeanFactory pre-instantiates singletons  May be overridden on per-instance basis by lazy- init=“true”  Beans may also be marked abstract, allowing reuse of attribute values through inheritance
  • 13. 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”
  • 14. Dependency Checking  Ensures properties are defined  Per-bean attribute dependency-check  None required by default  Verifies autowiring succeeded  “simple”  all but collaborators  “object”  collaborators only  “all”  Collaborators, primitive types, and collections
  • 15. Lifecycle Customization  Can define init method called after properties set  init-method=”<method-name>”  Can define destroy method as shutdown hook  destroy-method=”<method-name>”  May alternatively implement InitializingBean and/or DisposableBean  At cost of Spring dependency
  • 16. BeanFactory Miscellany  BeanFactoryAware interface provides BeanFactory for bean  setBeanFactory(BeanFactory)  BeanNameAware interface provides bean name  setBeanName(String)  FactoryBean for beans which are themselves factories  Object getObject()  Boolean isSingleton()  Class getObjectType()
  • 17. BeanFactory Usage InputStream is = new FileInputStream("beans.xml"); XmlBeanFactory factory = new XmlBeanFactory(is); MyBeanClass bean = (MyBeanClass)factory.getBean(“myBean”); OR ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); MyBeanClass bean = (MyBeanClass)ctx.getBean(“myBean”);
  • 18. ApplicationContext  Extends functionality of BeanFactory  Pre-instantiates singleton beans  Detects and registers BeanPostProcessors and BeanFactoryPostProcessors  Supports nesting of contexts  ApplicationListener and ApplicationEvents  Initialized and closed predefined  Custom may be created  MessageSource provides i18n messaging  <bean id=”messageSource” class=”...ResourceBundleMessageSource”/>  Contains list of bundle base names
  • 19. Web Initialization  Web applications may use ContextLoaderListener to initialize Spring web.xml <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> Automatically done by Spring DispatcherServlet
  • 20. Specialized Beans  MethodInvokingFactoryBean  Invokes method on registered beans or any static methods  Stores return value  SingletonBeanFactoryLocator and ContextSingletonBeanFactoryLocator  Useful for sharing BeanFactories  Eliminate duplication of beans in multiple similar factories or contexts
  • 21. ApplicationContext customization  Defined beans inheriting from BeanFactoryPostProcessor are detected and invoked  CustomEditorConfigurer  Registers custom PropertyEditors for converting configuration string values to specific types  AutoProxyCreators  Wrap beans in proxies based on various criteria (name, metadata, etc)  PropertyResourceConfigurer  Sets from property file and/or system properties
  • 22. 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>
  • 24. AOP Fundamentals  Aspect-oriented programming (AOP) provides for simplified application of cross-cutting concerns  Transaction management  Security  Logging  Auditing  Locking  AOP sometimes (partially) achieved via Decorators or Proxies  CORBA Portable Interceptors  Servlet Filters
  • 25. AOP Fundamentals  Aspect - Implementation of a cross-cutting concern.  Spring Advisors or Interceptors  Joinpoint - Execution point to target  Typically, methods  Advice - Action taken at a particular joinpoint.  Pointcut - A set of joinpoints specifying where advice should be applied (e.g. Regular expression)  Introduction/Mixin - Adding methods or fields to an advised class.  Weaving - Assembling aspects into advised objects.
  • 26. Spring AOP  Generally, applies aspects to beans using BeanFactory  Uses Dynamic Proxies if interface available otherwise CGLIB  CGLIB creates derived class which proxies requests  Bean class may not be final  Less capable than AspectJ  does not have field interception  only runtime weaving solution is available  Closer integration with AspectJ anticipated
  • 27. Spring Pointcuts  Pointcut applicability to a class may be evaluated statically or dynamically  Spring only creates proxies where necessary public interface Pointcut { ClassFilter getClassFilter(); MethodMatcher getMethodMatcher(); } public interface ClassFilter { boolean matches(Class clazz); }
  • 28. Pointcuts (cont'd)  Pointcut may be statically or dynamically evaluated based on isRuntime()  Abstract class StaticMethodMatcherPointcut requires override of 1st method only public interface MethodMatcher { boolean matches(Method m, Class targetClass); boolean isRuntime(); boolean matches(Method m, Class targetClass, Object[] args); } Only called if isRuntime() == true
  • 29. Pointcuts (cont'd)  Spring predefined pointcuts  In org.springframework.aop.support package  RegexpMethodPointcut  Union of multiple regular expressions  Uses Jakarta ORO package  ControlFlowPointcut  Similar to AspectJ cflow  Applied if call stack includes specific class and, optionally, method  UnionPointcut  Merges pointcuts
  • 30. Spring Advice  Can have per-class or per-instance Advice  Spring provides several Advice types  Around Advice  AOP Alliance compliant  Must call invocation.proceed() to call target public class MyAdvice implements AroundAdvice { Object invoke(MethodInvocation invocation) { // change arguments, start transaction, lock, etc. invocation.proceed(); // change return value, stop transaction, unlock,etc. } }
  • 31. Spring Advice  MethodBeforeAdvice  void before(Method m, Object[] args, Object target)  Cannot alter return type  ThrowsAdvice  Marker interface  Implementors define methods of form:  afterThrowing([Method], [args], [target], subclassOfThrowable)  AfterReturningAdvice  void afterReturning(Object returnValue, Method, m, Object[] args, Object target)  Cannot modify return value
  • 32. Spring Advice  IntroductionInterceptor provides ability to define mixins public class RollbackAdvice extends DelegatingIntroductionInterceptor implements RollbackSupport { Map map = new HashMap(); void rollback(Date date) { // rollback to state at given time } public Object invoke(MethodInvocation invocation) { // record change and time of change } }
  • 33. Injecting Advice <bean id=“meetingTarget" class=“ex.DefaultMeeting“ singleton=“false”> <property name=“topic">Spring</property> </bean> <bean id="myAdvisor" class=“ex.RollbackAdvice" singleton=”false”> </bean> <bean id="debugInterceptor" class="org.springframework.aop.interceptor.DebugInterceptor"> </bean>
  • 34. Injecting Advice (cont'd) <bean id=“meeting" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> All methods <value>ex.Meeting</value> using CGLib </property> if none defined <property name="target"><ref local=“meetingTarget"/></property> <property name="interceptorNames"> <list> Advisors applied in order <value>myAdvisor</value> <value>debugInterceptor</value> </list> </property> </bean>
  • 35. Autoproxying  Autoproxy bean definitions automatically proxy selected beans.  BeanNameAutoProxyCreator  Adds listed advisors/interceptors to beans with names matching regular expression  DefaultAdvisorAutoProxyCreator  Generic autoproxy infrastructure support  Applies all advisors defined in the context to all beans, proxying appropriately
  • 36. Metadata support  Spring supports obtaining meta data Object attributes at class, method, and field level  Not yet argument level (as JSR-175)  Currently supports Jakarta Commons Attributes  Support for JSR-175 in work  Metadata support provided via Attributes interface  Amenable to mocking unlike JDK reflection and Commons static methods
  • 37. Metadata autoproxying  Configuration of autoproxying based on metadata attributes simplifies configuration  Define custom attribute class  Define Advisor with pointcut based on custom attribute  Add Advisor in ApplicationContext with autoproxy  Examples  Transaction Attributes  Security Attributes  Pooling  Mapping of controllers to URLs
  • 39. AOP Transactions  Spring provides AOP support for declarative transactions  Delegates to a PlatformTransactionManager instance  DataSourceTransactionManager  HibernateTransactionManager  JdoTransactionManager  JtaTransactionManager
  • 40. 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>
  • 41. 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  Also allows definition of pre- and post- interceptors (e.g. for security)
  • 42. Injecting Transaction Support Declarative transaction support for single bean <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>
  • 43. Transaction Autoproxy <bean id="autoproxy" Generic autoproxy class="org...DefaultAdvisorAutoProxyCreator"> </bean> support <bean id="transactionAdvisor" class="org...TransactionAttributeSourceAdvisor" Invokes interceptor autowire="constructor" > based on attributes </bean> <bean id="transactionInterceptor" Applies transaction class="org...TransactionInterceptor" autowire="byType"> using transactionManager </bean> <bean id="transactionAttributeSource" Caches metadata class="org...AttributesTransactionAttributeSource" from classes autowire="constructor"> </bean> <bean id="attributes" class="org...CommonsAttributes" />
  • 45. 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
  • 46. 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); }
  • 47. 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()]);
  • 48. 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()]); } }
  • 49. 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>
  • 50. 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
  • 52. DispatcherServlet  The DispatcherServlet is the Spring Front Controller  Initializes WebApplicationContext  Uses /WEB-INF/[servlet-name]-servlet.xml by default  WebApplicationContext is bound into ServletContext
  • 53. 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
  • 54. Dispatcher Servlet Configuration  MultipartResolver  Handling of file upload  LocaleResolver  Default uses HTTP accept header, cookie, or session
  • 55. 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
  • 56. Controller Implementations  CommandControllers bind parameters to data objects  AbstractCommandController  AbstractFormController  SimpleFormController  WizardFormController
  • 57. 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

Notas do Editor

  1. Template closures JDBC support also provided