SlideShare a Scribd company logo
What’s New in
  Spring 3
Who Am I?




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Who Am I?
     Java, Spring, and OSGi fanatic




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Who Am I?
      Java, Spring, and OSGi fanatic
   Principal Consultant with Improving




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Who Am I?
      Java, Spring, and OSGi fanatic
   Principal Consultant with Improving
                                   Author
                        XDoclet in Action (Manning)

                         Spring in Action (Manning)

                  Modular Java (Pragmatic Bookshelf)




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Who Am I?
      Java, Spring, and OSGi fanatic
   Principal Consultant with Improving
                                   Author
                        XDoclet in Action (Manning)

                         Spring in Action (Manning)

                  Modular Java (Pragmatic Bookshelf)




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Where we’ve
   been

Spring: This is your life!
Evolution of Spring




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Evolution of Spring
      Spring 1.x
 <bean class="...">
 </bean>




         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Evolution of Spring
      Spring 1.x
 <bean class="...">
 </bean>
                                                                            Spring 2.0
                                                                               <tx:/>




         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Evolution of Spring
      Spring 1.x
 <bean class="...">
 </bean>
                                                                             Spring 2.0
                                                                                <tx:/>



   Spring 2.5
  @Component
  @Autowired



          E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Evolution of Spring
      Spring 1.x
 <bean class="...">
 </bean>
                                                                             Spring 2.0
                                                                                <tx:/>



   Spring 2.5
  @Component
  @Autowired                                                               Spring 3.0
                                                                                   ?
          E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Evolution of Spring
      Spring 1.x
 <bean class="...">
 </bean>
                                                                             Spring 2.0
                                                                                <tx:/>



   Spring 2.5
  @Component
  @Autowired                                                               Spring 3.0
                                                                                   ?
          E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.0




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.0


              Dependency injection




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.0


              Dependency injection

      POJO-oriented development




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.0


              Dependency injection

      POJO-oriented development

    Declarative AOP and transactions




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.0


              Dependency injection

      POJO-oriented development

    Declarative AOP and transactions

                      MVC framework



      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0
              Problem-specific XML




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0
              Problem-specific XML

          Extensible configuration




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0
              Problem-specific XML

          Extensible configuration

                          Bean scoping




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0
              Problem-specific XML

          Extensible configuration

                          Bean scoping

     Groovy, JRuby, and BeanShell




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0
              Problem-specific XML

          Extensible configuration

                          Bean scoping

     Groovy, JRuby, and BeanShell

                         JSP tag library



      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0
              Problem-specific XML

          Extensible configuration

                          Bean scoping

      Groovy, JRuby, and BeanShell

                         JSP tag library

     Java 5 autoboxing and generics
      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.5




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.5


         Annotation-driven wiring




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.5


         Annotation-driven wiring

     Automatic bean configuration




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.5


           Annotation-driven wiring

       Automatic bean configuration

   New annotation-driven MVC framework




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.5


           Annotation-driven wiring

       Automatic bean configuration

   New annotation-driven MVC framework

     JUnit 4-based integration testing



        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.0




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.0
<bean id="linus"
      class="com.springinaction.peanuts.Linus">
  <property name="blanket">
    <ref bean="blanket" />
  </property>
</bean>

<bean id="blanket"
      class="com.springinaction.peanuts.Blanket">
  <property name="color">
    <value>blue</value>
  </property>
</bean>

           E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.1




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 1.1


<bean id="linus"
      class="com.springinaction.peanuts.Linus">
  <property name="blanket" ref="blanket" />
</bean>

<bean id="blanket"
      class="com.springinaction.peanuts.Blanket">
  <property name="color" value="blue" />
</bean>




           E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.0


<bean id="linus"
      class="com.springinaction.peanuts.Linus"
      p:blanket-ref="blanket" />

<bean id="blanket"
      class="com.springinaction.peanuts.Blanket"
      p:color="blue" />




           E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.5




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring 2.5



<context:component-scan
   base-package="com.springinaction.peanuts" />

<bean id="blanket"
      class="com.springinaction.peanuts.Blanket"
      p:color="blue" />




           E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Annotation-Driven Wiring




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Annotation-Driven Wiring

    Java:




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Annotation-Driven Wiring
                             @Component
                             public class Linus {

    Java:
                               @Autowired
                               private Blanket blanket;

                                 public Blanket getBlanket() {
                                   return blanket;
                                 }
                             }




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Annotation-Driven Wiring
                             @Component
                             public class Linus {

    Java:
                               @Autowired
                               private Blanket blanket;

                                 public Blanket getBlanket() {
                                   return blanket;
                                 }
                             }




                                                                                 Spring
                                                                              : Context
      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Annotation-Driven Wiring
                                      @Component
                                      public class Linus {

           Java:
                                        @Autowired
                                        private Blanket blanket;

                                          public Blanket getBlanket() {
                                            return blanket;
                                          }
                                      }




<context:component-scan                                                                   Spring
    base-package="com.springinaction.peanuts" />
                                                                                       : Context
               E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
What’s new in
 Spring 3?
Spring Expression Language




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring Expression Language
  Wires values evaluated from expressions
      Works in XML and annotations




         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring Expression Language
  Wires values evaluated from expressions
        Works in XML and annotations



<bean class="com.springinaction.peanuts.Blanket">
   <property name="color"
        value="#{someOtherBean.color}" />
</bean>




           E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring Expression Language
  Wires values evaluated from expressions
      Works in XML and annotations
        @Component
        public class Blanket {
          @Value("#{someOtherBean.color}")
          private String color;

             public Blanket() {
             }

             // ...
        }




            E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Expression variables




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Expression variables

                        Any bean ID




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Expression variables

                        Any bean ID
                 systemProperties




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Expression variables

                        Any bean ID
                 systemProperties

      Scope/Context-specific...
                           contextProperties

                           contextAttributes

                                     request

                                     session




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties
             "#{settingBean.databaseUrl}"




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties
             "#{settingBean.databaseUrl}"


    Referencing system properties




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties
             "#{settingBean.databaseUrl}"


    Referencing system properties
      "#{systemProperties.favoriteColor}"




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties
             "#{settingBean.databaseUrl}"


    Referencing system properties
      "#{systemProperties.favoriteColor}"


                   Evaluating truth




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties
               "#{settingBean.databaseUrl}"


    Referencing system properties
        "#{systemProperties.favoriteColor}"


                     Evaluating truth
    "#{systemProperties.favoriteColor == 'red'}"




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties
               "#{settingBean.databaseUrl}"


    Referencing system properties
        "#{systemProperties.favoriteColor}"


                     Evaluating truth
    "#{systemProperties.favoriteColor == 'red'}"


              Using static methods




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties
               "#{settingBean.databaseUrl}"


    Referencing system properties
        "#{systemProperties.favoriteColor}"


                     Evaluating truth
    "#{systemProperties.favoriteColor == 'red'}"


              Using static methods
            "#{T(java.lang.Math).random()}"




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
     Referencing bean properties
               "#{settingBean.databaseUrl}"


    Referencing system properties
        "#{systemProperties.favoriteColor}"


                     Evaluating truth
    "#{systemProperties.favoriteColor == 'red'}"


              Using static methods
            "#{T(java.lang.Math).random()}"


                  Templated Strings

        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
SpEL examples
         Referencing bean properties
                   "#{settingBean.databaseUrl}"


        Referencing system properties
            "#{systemProperties.favoriteColor}"


                         Evaluating truth
       "#{systemProperties.favoriteColor == 'red'}"


                  Using static methods
                "#{T(java.lang.Math).random()}"


                      Templated Strings
  "The time is #{T(java.lang.System).currentTimeMillis()}"
            E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
One more SpEL example




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
One more SpEL example




    Collection projection




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
One more SpEL example




    Collection projection
     "#{snoopyPersonas.![name]}"




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@PathVariable




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@PathVariable


                                      Spring 2.5:
 @Controller
 public class SpittleListController {
   @RequestMapping("/spittleList.htm")
   public String displaySpittleList(@RequestParam("username") String userName) {
     // ...
     return "spittleList";
   }
 }




     http://localhost:8080/spitter/spittleList.htm?username=habuma




                  E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@PathVariable


                                      Spring 3.0:
 @Controller
 public class SpittleListController {
   @RequestMapping("/{username}/list")
   public String displaySpittleList(@PathVariable("username") String userName) {
     // ...
     return "spittleList";
   }
 }




                 http://localhost:8080/spitter/habuma/list




                  E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@RequestHeader




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@RequestHeader


                               Spring 2.5:
   @Controller
   public class HomeController {
     @RequestMapping("/home")
     public String displayHomePage(HttpServletRequest request) {
       String userAgent = request.getHeader("User-Agent");
       // ...
       return "home";
     }
   }




           E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@RequestHeader


                                      Spring 3.0:
 @Controller
 public class HomeController {
   @RequestMapping("/home")
   public String displayHomePage(@RequestHeader("User-Agent") String userAgent) {
     // ...
     return "home";
   }
 }




                  E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@CookieValue




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@CookieValue


                               Spring 2.5:
   @Controller
   public class HomeController {
     @RequestMapping("/home")
     public String displayHomePage(HttpServletRequest request) {
       String lastVisit = "never";
       Cookie[] cookies = request.getCookies();
       for (Cookie cookie : cookies) {
         if("LastVisit".equals(cookie.getName())) {
           lastVisit = cookie.getValue();
         }
       }
       // ...
       return "home";
     }
   }




           E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
@CookieValue


                                      Spring 3.0:
 @Controller
 public class HomeController {
   @RequestMapping("/home")
   public String displayHomePage(@CookieValue("LastVisit") String lastVisit) {
     // ...
     return "home";
   }
 }




                  E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
default values




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
default values


              New for @RequestParam
  @RequestParam(value="productId", defaultValue="1234") String productId




             E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
default values


              New for @RequestParam
  @RequestParam(value="productId", defaultValue="1234") String productId


  Standard issue for @RequestHeader and
               @CookieValue




             E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
default values


                New for @RequestParam
   @RequestParam(value="productId", defaultValue="1234") String productId


   Standard issue for @RequestHeader and
                @CookieValue
 @RequestHeader(value="User-Agent", defaultValue="1234") String userAgent




               E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
default values


                New for @RequestParam
   @RequestParam(value="productId", defaultValue="1234") String productId


   Standard issue for @RequestHeader and
                @CookieValue
 @RequestHeader(value="User-Agent", defaultValue="1234") String userAgent

  @CookieValue(value="LastVisit", defaultValue="1234") String lastVisit




               E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
<spring:url>




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
<spring:url>
                          New JSP tag
    Generates context-senstive URL




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
<spring:url>
                               New JSP tag
        Generates context-senstive URL

 <spring:url value="/spittle/{id}/edit"
               var="editUrl"
         escapeXml="true">
     <spring:param name="id" value="${spittle.id}" />
 </spring:url>

 <a href="${editUrl}">Do something</a>




            E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Declarative Validation




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Declarative Validation


       Based on JSR-303 validators




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Declarative Validation


          Based on JSR-303 validators

 Hibernate Validator as default implementation




         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Declarative Validation


          Based on JSR-303 validators

 Hibernate Validator as default implementation

   Primarily used to validate inputs to Spring
                MVC controllers




         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Declarative Validation


          Based on JSR-303 validators

 Hibernate Validator as default implementation

   Primarily used to validate inputs to Spring
                MVC controllers

         Configured automatically with
         <mvc:annotation-driven/>


         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
More on validation
                                                        @Column(name="spittleText")
                                                        @NotNull
        In entity                                       @Size(min=1, max=140)
          class                                         public String getText() {
                                                          return this.text;
                                                        }




@RequestMapping(method=POST)
public String addSpittle(
                  @Valid Spittle spittle,
                  BindingResult result) {
  if(result.hasErrors()) {
    return "spittle/form";
                                                                                 In Spring MVC
  }                                                                                 controller
    spitterService.addSpittle(spittle);
    return "redirect:/home";
}

                E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
ETag Support




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
ETag Support
      ShallowEtagHeaderFilter




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
ETag Support
          ShallowEtagHeaderFilter
    <filter>
      <filter-name>etagFilter</filter-name>
      <filter-class>
         org.springframework.web.filter.ShallowEtagHeaderFilter
      </filter-class>
    </filter>

    <filter-mapping>
       <filter-name>etagFilter</filter-name>
       <servlet-name>spitter</servlet-name>
    </filter-mapping>




         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
ETag Support
             ShallowEtagHeaderFilter
       <filter>
         <filter-name>etagFilter</filter-name>
         <filter-class>
            org.springframework.web.filter.ShallowEtagHeaderFilter
         </filter-class>
       </filter>

       <filter-mapping>
          <filter-name>etagFilter</filter-name>
          <servlet-name>spitter</servlet-name>
       </filter-mapping>


 Returns HTTP 304 if content is unmodified
                      if-none-match
                   (MD5 Hash comparison)
                           Saves bandwidth
            E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Method Conversion




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Method Conversion
     HTTP defines four methods:
         GET, POST, DELETE, and PUT




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Method Conversion
     HTTP defines four methods:
         GET, POST, DELETE, and PUT
         HTML only supports 2:
                           GET and POST




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Method Conversion
         HTTP defines four methods:
             GET, POST, DELETE, and PUT
             HTML only supports 2:
                               GET and POST
 Spring 3’s HiddenHttpMethodFilter fixes that




          E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Method Conversion
         HTTP defines four methods:
              GET, POST, DELETE, and PUT
              HTML only supports 2:
                                GET and POST
 Spring 3’s HiddenHttpMethodFilter fixes that
       <filter>
         <filter-name>hiddenMethodFilter</filter-name>
         <filter-class>
             org.springframework.web.filter.HiddenHttpMethodFilter
         </filter-class>
       </filter>

       <filter-mapping>
          <filter-name>hiddenMethodFilter</filter-name>
          <servlet-name>spitter</servlet-name>
       </filter-mapping>


           E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Methods in Spring MVC




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Methods in Spring MVC
 Spring MVC form tags support hidden HTTP
                 methods




         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Methods in Spring MVC
  Spring MVC form tags support hidden HTTP
                  methods
<form:form method="delete">
    <p class="submit"><input type="submit" value="Delete Spittle"/></p>
</form:form>




                 E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Methods in Spring MVC
  Spring MVC form tags support hidden HTTP
                  methods
<form:form method="delete">
    <p class="submit"><input type="submit" value="Delete Spittle"/></p>
</form:form>




    Controllers can handle all HTTP methods




                 E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
HTTP Methods in Spring MVC
  Spring MVC form tags support hidden HTTP
                  methods
<form:form method="delete">
    <p class="submit"><input type="submit" value="Delete Spittle"/></p>
</form:form>




    Controllers can handle all HTTP methods
     @RequestMapping(method = RequestMethod.DELETE)
     public String deleteSpittle(@PathVariable long spittleId) {
         spittleService.deleteSpittle(spittleId);
         return "redirect:/home";
     }




                 E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Content negotiation




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Content negotiation

      ContentNegotiatingViewResolver
 Chooses a view based on HTTP Accepts header, JAF
  content type, format parameter, or request path
                     extension




          E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Content negotiation

      ContentNegotiatingViewResolver
 Chooses a view based on HTTP Accepts header, JAF
  content type, format parameter, or request path
                     extension
                   New view resolvers
                    AbstractAtomFeedView
                      AbstractRssFeedView
                            MarshallingView
                 MappingJacksonJsonView

          E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
REST consumption




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
REST consumption
                 New RestTemplate




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
REST consumption
                                  New RestTemplate

Read
RestTemplate template = new RestTemplate();
template.getForObject("http://localhost:8080/spitter/users/${id}",
    String.class, userId);




                      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
REST consumption
                                  New RestTemplate

Read
RestTemplate template = new RestTemplate();
template.getForObject("http://localhost:8080/spitter/users/${id}",
    String.class, userId);




       Create
       RestTemplate template = new RestTemplate();
       SpitterUser user = new SpitterUser(userName, password);
       template.postForLocation("http://localhost:8080/spitter/users/${id}",
           user, userId);




                      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
REST consumption
                                  New RestTemplate

Read
RestTemplate template = new RestTemplate();
template.getForObject("http://localhost:8080/spitter/users/${id}",
    String.class, userId);




       Create
       RestTemplate template = new RestTemplate();
       SpitterUser user = new SpitterUser(userName, password);
       template.postForLocation("http://localhost:8080/spitter/users/${id}",
           user, userId);




                    Delete
                    RestTemplate template = new RestTemplate();
                    template.delete("http://localhost:8080/spitter/users/${id}", userId);

                      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
JavaConfig




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
JavaConfig
    @Configuration
    public class PeanutsConfiguration {

        @Bean
        public Linus linus() {
          Linus linus = new Linus();
          linus.setBlanket(blanket());
          return linus;
        }

        @Bean
        private Blanket blanket() {
          Blanket blanket = new Blanket();
          blanket.setColor("blue");
          return blanket;
        }
    }

        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
JavaConfig in Components




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
JavaConfig in Components
      @Component
      public class KiteEatingTree
         implements DeciduousTree {

          public void shedLeaves() {
            // ...
          }

          @Bean
          public Kite kite() {
            return new Kite();
          }
      }




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Asynchronous Methods




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Asynchronous Methods

    Annotate a bean method
    @Async
    public void backgroundJob()
    { ... }




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Asynchronous Methods

    Annotate a bean method
    @Async
    public void backgroundJob()
    { ... }




     In Spring configuration:
     <task:annotation-driven/>




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Scheduling




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Scheduling
    @Scheduled(fixedDelay=3000L)
      public void ping() { ... }




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Scheduling
    @Scheduled(fixedDelay=3000L)
      public void ping() { ... }



    @Scheduled(fixedRate=3000L)
      public void ping() { ... }




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Scheduling
    @Scheduled(fixedDelay=3000L)
      public void ping() { ... }



    @Scheduled(fixedRate=3000L)
      public void ping() { ... }


  @Scheduled(cron="0 0 0 * * SAT)
    public void ping() { ... }



       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Miscellaneous




     E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Miscellaneous



  Object-to-XML mapping from Spring-WS




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Miscellaneous



  Object-to-XML mapping from Spring-WS
  Embracing Java 5 (generics, autoboxing,
            annotations, etc).




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
What’s going
   away
Bye bye




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Bye bye

   Spring MVC controller hierarchy                                                    (deprecated)




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Bye bye

   Spring MVC controller hierarchy                                                    (deprecated)



                         JUnit 3 testing




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Bye bye

   Spring MVC controller hierarchy                                                    (deprecated)



                         JUnit 3 testing
                Commons Attributes




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Bye bye

   Spring MVC controller hierarchy                                                    (deprecated)



                         JUnit 3 testing
                Commons Attributes
            Native TopLink support




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Bye bye

   Spring MVC controller hierarchy                                                    (deprecated)



                         JUnit 3 testing
                Commons Attributes
            Native TopLink support
     WebLogic 8.1 and WebSphere 5.1




       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Bye bye

   Spring MVC controller hierarchy                                                    (deprecated)



                         JUnit 3 testing
                Commons Attributes
            Native TopLink support
     WebLogic 8.1 and WebSphere 5.1
                                  spring.jar


       E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Bye bye




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
What else?
Keep your eye on...




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
             Spring Web Flow 2.0




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
             Spring Web Flow 2.0
                    Spring BlazeDS




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
             Spring Web Flow 2.0
                    Spring BlazeDS
               Spring Security 3.0




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
               Spring Web Flow 2.0
                      Spring BlazeDS
                 Spring Security 3.0
   Spring Dynamic Modules (Spring-DM)




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
               Spring Web Flow 2.0
                      Spring BlazeDS
                 Spring Security 3.0
   Spring Dynamic Modules (Spring-DM)
          SpringSource dm Server




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
               Spring Web Flow 2.0
                      Spring BlazeDS
                 Spring Security 3.0
   Spring Dynamic Modules (Spring-DM)
          SpringSource dm Server
            SpringSource tc Server




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
               Spring Web Flow 2.0
                      Spring BlazeDS
                 Spring Security 3.0
   Spring Dynamic Modules (Spring-DM)
          SpringSource dm Server
            SpringSource tc Server
                                      Roo



        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
               Spring Web Flow 2.0
                      Spring BlazeDS
                 Spring Security 3.0
   Spring Dynamic Modules (Spring-DM)
          SpringSource dm Server
            SpringSource tc Server
                                      Roo
                        Groovy/Grails

        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Keep your eye on...
               Spring Web Flow 2.0
                      Spring BlazeDS
                 Spring Security 3.0
   Spring Dynamic Modules (Spring-DM)
          SpringSource dm Server
            SpringSource tc Server
                                      Roo
                        Groovy/Grails
          SpringSource Tool Suite
        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
In summary...
Spring simplifies




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring simplifies


   Spring’s initial focus was to simplify
              enterprise Java




        E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring simplifies


   Spring’s initial focus was to simplify
              enterprise Java
   Now simplification efforts turn inward




         E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring simplifies


     Spring’s initial focus was to simplify
                enterprise Java
    Now simplification efforts turn inward
 Trending away from XML toward annotations




          E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring simplifies


     Spring’s initial focus was to simplify
                enterprise Java
    Now simplification efforts turn inward
 Trending away from XML toward annotations
      All the while, offering more power



          E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Spring simplifies




      E-mail: craig@habuma.com   Blog: http://www.springinaction.com   Twitter: habuma
Thank You

Don’t forget the evals!
Ad

More Related Content

What's hot (20)

The web is too slow
The web is too slow The web is too slow
The web is too slow
Andy Davies
 
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com RubyFisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fabio Akita
 
The Case for HTTP/2 - EpicFEL Sept 2015
The Case for HTTP/2 - EpicFEL Sept 2015The Case for HTTP/2 - EpicFEL Sept 2015
The Case for HTTP/2 - EpicFEL Sept 2015
Andy Davies
 
Speed Matters!
Speed Matters!Speed Matters!
Speed Matters!
Andy Davies
 
The Case for HTTP/2 - Internetdagarna 2015 - Stockholm
The Case for HTTP/2  - Internetdagarna 2015 - StockholmThe Case for HTTP/2  - Internetdagarna 2015 - Stockholm
The Case for HTTP/2 - Internetdagarna 2015 - Stockholm
Andy Davies
 
Mobile Web Performance - Getting and Staying Fast
Mobile Web Performance -  Getting and Staying FastMobile Web Performance -  Getting and Staying Fast
Mobile Web Performance - Getting and Staying Fast
Andy Davies
 
WEBHOOKS VS WEBSUB - COMMENT STREAMER VOS ÉVÉNEMENTS EN TEMPS RÉEL ?
WEBHOOKS VS WEBSUB - COMMENT STREAMER VOS ÉVÉNEMENTS EN TEMPS RÉEL ?WEBHOOKS VS WEBSUB - COMMENT STREAMER VOS ÉVÉNEMENTS EN TEMPS RÉEL ?
WEBHOOKS VS WEBSUB - COMMENT STREAMER VOS ÉVÉNEMENTS EN TEMPS RÉEL ?
Audrey Neveu
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dee Sadler
 
The Case for HTTP/2 - GreeceJS - June 2016
The Case for HTTP/2 -  GreeceJS - June 2016The Case for HTTP/2 -  GreeceJS - June 2016
The Case for HTTP/2 - GreeceJS - June 2016
Andy Davies
 
Building performance into the new yahoo homepage presentation
Building performance into the new yahoo  homepage presentationBuilding performance into the new yahoo  homepage presentation
Building performance into the new yahoo homepage presentation
masudakram
 
Sniffing the Mobile Context
Sniffing the Mobile ContextSniffing the Mobile Context
Sniffing the Mobile Context
Andy Davies
 
SEO Tools of the Trade - Barcelona Affiliate Conference 2014
SEO Tools of the Trade - Barcelona Affiliate Conference 2014SEO Tools of the Trade - Barcelona Affiliate Conference 2014
SEO Tools of the Trade - Barcelona Affiliate Conference 2014
Bastian Grimm
 
Structured Data & Schema.org - SMX Milan 2014
Structured Data & Schema.org - SMX Milan 2014Structured Data & Schema.org - SMX Milan 2014
Structured Data & Schema.org - SMX Milan 2014
Bastian Grimm
 
Word campktm speed-security
Word campktm speed-securityWord campktm speed-security
Word campktm speed-security
Digamber Pradhan
 
SearchLove Boston 2018 - Bartosz Goralewicz - JavaScript: Looking Past the ...
SearchLove Boston 2018 -  Bartosz Goralewicz -  JavaScript: Looking Past the ...SearchLove Boston 2018 -  Bartosz Goralewicz -  JavaScript: Looking Past the ...
SearchLove Boston 2018 - Bartosz Goralewicz - JavaScript: Looking Past the ...
Distilled
 
Introduction to HTML5 & CSS3
Introduction to HTML5 & CSS3Introduction to HTML5 & CSS3
Introduction to HTML5 & CSS3
Pradeep Varadaraja Banavara
 
AMP Accelerated Mobile Pages - To AMPFinity And Beyond
AMP Accelerated Mobile Pages - To AMPFinity And BeyondAMP Accelerated Mobile Pages - To AMPFinity And Beyond
AMP Accelerated Mobile Pages - To AMPFinity And Beyond
Dawn Anderson MSc DigM
 
Jazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Jazz up your JavaScript: Unobtrusive scripting with JavaScript librariesJazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Jazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Simon Willison
 
What's in my SEO Toolbox: Linkbuilding Edition - SMX Milan 2014
What's in my SEO Toolbox: Linkbuilding Edition - SMX Milan 2014What's in my SEO Toolbox: Linkbuilding Edition - SMX Milan 2014
What's in my SEO Toolbox: Linkbuilding Edition - SMX Milan 2014
Bastian Grimm
 
Testing Angular 2 Applications - HTML5 Denver 2016
Testing Angular 2 Applications - HTML5 Denver 2016Testing Angular 2 Applications - HTML5 Denver 2016
Testing Angular 2 Applications - HTML5 Denver 2016
Matt Raible
 
The web is too slow
The web is too slow The web is too slow
The web is too slow
Andy Davies
 
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com RubyFisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fabio Akita
 
The Case for HTTP/2 - EpicFEL Sept 2015
The Case for HTTP/2 - EpicFEL Sept 2015The Case for HTTP/2 - EpicFEL Sept 2015
The Case for HTTP/2 - EpicFEL Sept 2015
Andy Davies
 
The Case for HTTP/2 - Internetdagarna 2015 - Stockholm
The Case for HTTP/2  - Internetdagarna 2015 - StockholmThe Case for HTTP/2  - Internetdagarna 2015 - Stockholm
The Case for HTTP/2 - Internetdagarna 2015 - Stockholm
Andy Davies
 
Mobile Web Performance - Getting and Staying Fast
Mobile Web Performance -  Getting and Staying FastMobile Web Performance -  Getting and Staying Fast
Mobile Web Performance - Getting and Staying Fast
Andy Davies
 
WEBHOOKS VS WEBSUB - COMMENT STREAMER VOS ÉVÉNEMENTS EN TEMPS RÉEL ?
WEBHOOKS VS WEBSUB - COMMENT STREAMER VOS ÉVÉNEMENTS EN TEMPS RÉEL ?WEBHOOKS VS WEBSUB - COMMENT STREAMER VOS ÉVÉNEMENTS EN TEMPS RÉEL ?
WEBHOOKS VS WEBSUB - COMMENT STREAMER VOS ÉVÉNEMENTS EN TEMPS RÉEL ?
Audrey Neveu
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dee Sadler
 
The Case for HTTP/2 - GreeceJS - June 2016
The Case for HTTP/2 -  GreeceJS - June 2016The Case for HTTP/2 -  GreeceJS - June 2016
The Case for HTTP/2 - GreeceJS - June 2016
Andy Davies
 
Building performance into the new yahoo homepage presentation
Building performance into the new yahoo  homepage presentationBuilding performance into the new yahoo  homepage presentation
Building performance into the new yahoo homepage presentation
masudakram
 
Sniffing the Mobile Context
Sniffing the Mobile ContextSniffing the Mobile Context
Sniffing the Mobile Context
Andy Davies
 
SEO Tools of the Trade - Barcelona Affiliate Conference 2014
SEO Tools of the Trade - Barcelona Affiliate Conference 2014SEO Tools of the Trade - Barcelona Affiliate Conference 2014
SEO Tools of the Trade - Barcelona Affiliate Conference 2014
Bastian Grimm
 
Structured Data & Schema.org - SMX Milan 2014
Structured Data & Schema.org - SMX Milan 2014Structured Data & Schema.org - SMX Milan 2014
Structured Data & Schema.org - SMX Milan 2014
Bastian Grimm
 
Word campktm speed-security
Word campktm speed-securityWord campktm speed-security
Word campktm speed-security
Digamber Pradhan
 
SearchLove Boston 2018 - Bartosz Goralewicz - JavaScript: Looking Past the ...
SearchLove Boston 2018 -  Bartosz Goralewicz -  JavaScript: Looking Past the ...SearchLove Boston 2018 -  Bartosz Goralewicz -  JavaScript: Looking Past the ...
SearchLove Boston 2018 - Bartosz Goralewicz - JavaScript: Looking Past the ...
Distilled
 
AMP Accelerated Mobile Pages - To AMPFinity And Beyond
AMP Accelerated Mobile Pages - To AMPFinity And BeyondAMP Accelerated Mobile Pages - To AMPFinity And Beyond
AMP Accelerated Mobile Pages - To AMPFinity And Beyond
Dawn Anderson MSc DigM
 
Jazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Jazz up your JavaScript: Unobtrusive scripting with JavaScript librariesJazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Jazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Simon Willison
 
What's in my SEO Toolbox: Linkbuilding Edition - SMX Milan 2014
What's in my SEO Toolbox: Linkbuilding Edition - SMX Milan 2014What's in my SEO Toolbox: Linkbuilding Edition - SMX Milan 2014
What's in my SEO Toolbox: Linkbuilding Edition - SMX Milan 2014
Bastian Grimm
 
Testing Angular 2 Applications - HTML5 Denver 2016
Testing Angular 2 Applications - HTML5 Denver 2016Testing Angular 2 Applications - HTML5 Denver 2016
Testing Angular 2 Applications - HTML5 Denver 2016
Matt Raible
 

Viewers also liked (18)

Spring MVC Architecture Tutorial
Spring MVC Architecture TutorialSpring MVC Architecture Tutorial
Spring MVC Architecture Tutorial
Java Success Point
 
Spring Mvc Rest
Spring Mvc RestSpring Mvc Rest
Spring Mvc Rest
Craig Walls
 
Spring mvc my Faviourite Slide
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite Slide
Daniel Adenew
 
02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions
Dhiraj Champawat
 
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsSpring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Raghavan Mohan
 
Spring 3 Annotated Development
Spring 3 Annotated DevelopmentSpring 3 Annotated Development
Spring 3 Annotated Development
kensipe
 
Spring @Transactional Explained
Spring @Transactional ExplainedSpring @Transactional Explained
Spring @Transactional Explained
Smita Prasad
 
MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVC
Anton Krasnoshchok
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
Rajiv Srivastava
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
ZeroTurnaround
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
Richard Paul
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overview
zerovirus23
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
Guy Nir
 
Spring Mvc,Java, Spring
Spring Mvc,Java, SpringSpring Mvc,Java, Spring
Spring Mvc,Java, Spring
ifnu bima
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring Session
David Gómez García
 
Spring 4 - A&BP CC
Spring 4 - A&BP CCSpring 4 - A&BP CC
Spring 4 - A&BP CC
JWORKS powered by Ordina
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVC
Guy Nir
 
Spring 4 Web App
Spring 4 Web AppSpring 4 Web App
Spring 4 Web App
Rossen Stoyanchev
 
Spring MVC Architecture Tutorial
Spring MVC Architecture TutorialSpring MVC Architecture Tutorial
Spring MVC Architecture Tutorial
Java Success Point
 
Spring mvc my Faviourite Slide
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite Slide
Daniel Adenew
 
02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions
Dhiraj Champawat
 
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsSpring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Raghavan Mohan
 
Spring 3 Annotated Development
Spring 3 Annotated DevelopmentSpring 3 Annotated Development
Spring 3 Annotated Development
kensipe
 
Spring @Transactional Explained
Spring @Transactional ExplainedSpring @Transactional Explained
Spring @Transactional Explained
Smita Prasad
 
MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVC
Anton Krasnoshchok
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
ZeroTurnaround
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
Richard Paul
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overview
zerovirus23
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
Guy Nir
 
Spring Mvc,Java, Spring
Spring Mvc,Java, SpringSpring Mvc,Java, Spring
Spring Mvc,Java, Spring
ifnu bima
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring Session
David Gómez García
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVC
Guy Nir
 
Ad

Recently uploaded (20)

Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Ad

What's new in Spring 3?

  • 1. What’s New in Spring 3
  • 2. Who Am I? E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 3. Who Am I? Java, Spring, and OSGi fanatic E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 4. Who Am I? Java, Spring, and OSGi fanatic Principal Consultant with Improving E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 5. Who Am I? Java, Spring, and OSGi fanatic Principal Consultant with Improving Author XDoclet in Action (Manning) Spring in Action (Manning) Modular Java (Pragmatic Bookshelf) E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 6. Who Am I? Java, Spring, and OSGi fanatic Principal Consultant with Improving Author XDoclet in Action (Manning) Spring in Action (Manning) Modular Java (Pragmatic Bookshelf) E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 7. Where we’ve been Spring: This is your life!
  • 8. Evolution of Spring E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 9. Evolution of Spring Spring 1.x <bean class="..."> </bean> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 10. Evolution of Spring Spring 1.x <bean class="..."> </bean> Spring 2.0 <tx:/> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 11. Evolution of Spring Spring 1.x <bean class="..."> </bean> Spring 2.0 <tx:/> Spring 2.5 @Component @Autowired E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 12. Evolution of Spring Spring 1.x <bean class="..."> </bean> Spring 2.0 <tx:/> Spring 2.5 @Component @Autowired Spring 3.0 ? E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 13. Evolution of Spring Spring 1.x <bean class="..."> </bean> Spring 2.0 <tx:/> Spring 2.5 @Component @Autowired Spring 3.0 ? E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 14. Spring 1.0 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 15. Spring 1.0 Dependency injection E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 16. Spring 1.0 Dependency injection POJO-oriented development E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 17. Spring 1.0 Dependency injection POJO-oriented development Declarative AOP and transactions E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 18. Spring 1.0 Dependency injection POJO-oriented development Declarative AOP and transactions MVC framework E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 19. Spring 2.0 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 20. Spring 2.0 Problem-specific XML E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 21. Spring 2.0 Problem-specific XML Extensible configuration E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 22. Spring 2.0 Problem-specific XML Extensible configuration Bean scoping E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 23. Spring 2.0 Problem-specific XML Extensible configuration Bean scoping Groovy, JRuby, and BeanShell E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 24. Spring 2.0 Problem-specific XML Extensible configuration Bean scoping Groovy, JRuby, and BeanShell JSP tag library E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 25. Spring 2.0 Problem-specific XML Extensible configuration Bean scoping Groovy, JRuby, and BeanShell JSP tag library Java 5 autoboxing and generics E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 26. Spring 2.5 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 27. Spring 2.5 Annotation-driven wiring E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 28. Spring 2.5 Annotation-driven wiring Automatic bean configuration E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 29. Spring 2.5 Annotation-driven wiring Automatic bean configuration New annotation-driven MVC framework E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 30. Spring 2.5 Annotation-driven wiring Automatic bean configuration New annotation-driven MVC framework JUnit 4-based integration testing E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 31. Spring 1.0 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 32. Spring 1.0 <bean id="linus" class="com.springinaction.peanuts.Linus"> <property name="blanket"> <ref bean="blanket" /> </property> </bean> <bean id="blanket" class="com.springinaction.peanuts.Blanket"> <property name="color"> <value>blue</value> </property> </bean> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 33. Spring 1.1 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 34. Spring 1.1 <bean id="linus" class="com.springinaction.peanuts.Linus"> <property name="blanket" ref="blanket" /> </bean> <bean id="blanket" class="com.springinaction.peanuts.Blanket"> <property name="color" value="blue" /> </bean> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 35. Spring 2.0 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 36. Spring 2.0 <bean id="linus" class="com.springinaction.peanuts.Linus" p:blanket-ref="blanket" /> <bean id="blanket" class="com.springinaction.peanuts.Blanket" p:color="blue" /> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 37. Spring 2.5 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 38. Spring 2.5 <context:component-scan base-package="com.springinaction.peanuts" /> <bean id="blanket" class="com.springinaction.peanuts.Blanket" p:color="blue" /> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 39. Annotation-Driven Wiring E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 40. Annotation-Driven Wiring Java: E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 41. Annotation-Driven Wiring @Component public class Linus { Java: @Autowired private Blanket blanket; public Blanket getBlanket() { return blanket; } } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 42. Annotation-Driven Wiring @Component public class Linus { Java: @Autowired private Blanket blanket; public Blanket getBlanket() { return blanket; } } Spring : Context E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 43. Annotation-Driven Wiring @Component public class Linus { Java: @Autowired private Blanket blanket; public Blanket getBlanket() { return blanket; } } <context:component-scan Spring base-package="com.springinaction.peanuts" /> : Context E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 44. What’s new in Spring 3?
  • 45. Spring Expression Language E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 46. Spring Expression Language Wires values evaluated from expressions Works in XML and annotations E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 47. Spring Expression Language Wires values evaluated from expressions Works in XML and annotations <bean class="com.springinaction.peanuts.Blanket"> <property name="color" value="#{someOtherBean.color}" /> </bean> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 48. Spring Expression Language Wires values evaluated from expressions Works in XML and annotations @Component public class Blanket { @Value("#{someOtherBean.color}") private String color; public Blanket() { } // ... } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 49. Expression variables E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 50. Expression variables Any bean ID E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 51. Expression variables Any bean ID systemProperties E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 52. Expression variables Any bean ID systemProperties Scope/Context-specific... contextProperties contextAttributes request session E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 53. SpEL examples E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 54. SpEL examples Referencing bean properties E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 55. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 56. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 57. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties "#{systemProperties.favoriteColor}" E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 58. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties "#{systemProperties.favoriteColor}" Evaluating truth E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 59. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties "#{systemProperties.favoriteColor}" Evaluating truth "#{systemProperties.favoriteColor == 'red'}" E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 60. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties "#{systemProperties.favoriteColor}" Evaluating truth "#{systemProperties.favoriteColor == 'red'}" Using static methods E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 61. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties "#{systemProperties.favoriteColor}" Evaluating truth "#{systemProperties.favoriteColor == 'red'}" Using static methods "#{T(java.lang.Math).random()}" E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 62. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties "#{systemProperties.favoriteColor}" Evaluating truth "#{systemProperties.favoriteColor == 'red'}" Using static methods "#{T(java.lang.Math).random()}" Templated Strings E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 63. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties "#{systemProperties.favoriteColor}" Evaluating truth "#{systemProperties.favoriteColor == 'red'}" Using static methods "#{T(java.lang.Math).random()}" Templated Strings "The time is #{T(java.lang.System).currentTimeMillis()}" E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 64. One more SpEL example E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 65. One more SpEL example Collection projection E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 66. One more SpEL example Collection projection "#{snoopyPersonas.![name]}" E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 67. @PathVariable E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 68. @PathVariable Spring 2.5: @Controller public class SpittleListController { @RequestMapping("/spittleList.htm") public String displaySpittleList(@RequestParam("username") String userName) { // ... return "spittleList"; } } http://localhost:8080/spitter/spittleList.htm?username=habuma E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 69. @PathVariable Spring 3.0: @Controller public class SpittleListController { @RequestMapping("/{username}/list") public String displaySpittleList(@PathVariable("username") String userName) { // ... return "spittleList"; } } http://localhost:8080/spitter/habuma/list E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 70. @RequestHeader E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 71. @RequestHeader Spring 2.5: @Controller public class HomeController { @RequestMapping("/home") public String displayHomePage(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); // ... return "home"; } } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 72. @RequestHeader Spring 3.0: @Controller public class HomeController { @RequestMapping("/home") public String displayHomePage(@RequestHeader("User-Agent") String userAgent) { // ... return "home"; } } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 73. @CookieValue E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 74. @CookieValue Spring 2.5: @Controller public class HomeController { @RequestMapping("/home") public String displayHomePage(HttpServletRequest request) { String lastVisit = "never"; Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if("LastVisit".equals(cookie.getName())) { lastVisit = cookie.getValue(); } } // ... return "home"; } } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 75. @CookieValue Spring 3.0: @Controller public class HomeController { @RequestMapping("/home") public String displayHomePage(@CookieValue("LastVisit") String lastVisit) { // ... return "home"; } } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 76. default values E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 77. default values New for @RequestParam @RequestParam(value="productId", defaultValue="1234") String productId E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 78. default values New for @RequestParam @RequestParam(value="productId", defaultValue="1234") String productId Standard issue for @RequestHeader and @CookieValue E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 79. default values New for @RequestParam @RequestParam(value="productId", defaultValue="1234") String productId Standard issue for @RequestHeader and @CookieValue @RequestHeader(value="User-Agent", defaultValue="1234") String userAgent E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 80. default values New for @RequestParam @RequestParam(value="productId", defaultValue="1234") String productId Standard issue for @RequestHeader and @CookieValue @RequestHeader(value="User-Agent", defaultValue="1234") String userAgent @CookieValue(value="LastVisit", defaultValue="1234") String lastVisit E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 81. <spring:url> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 82. <spring:url> New JSP tag Generates context-senstive URL E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 83. <spring:url> New JSP tag Generates context-senstive URL <spring:url value="/spittle/{id}/edit" var="editUrl" escapeXml="true"> <spring:param name="id" value="${spittle.id}" /> </spring:url> <a href="${editUrl}">Do something</a> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 84. Declarative Validation E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 85. Declarative Validation Based on JSR-303 validators E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 86. Declarative Validation Based on JSR-303 validators Hibernate Validator as default implementation E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 87. Declarative Validation Based on JSR-303 validators Hibernate Validator as default implementation Primarily used to validate inputs to Spring MVC controllers E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 88. Declarative Validation Based on JSR-303 validators Hibernate Validator as default implementation Primarily used to validate inputs to Spring MVC controllers Configured automatically with <mvc:annotation-driven/> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 89. More on validation @Column(name="spittleText") @NotNull In entity @Size(min=1, max=140) class public String getText() { return this.text; } @RequestMapping(method=POST) public String addSpittle( @Valid Spittle spittle, BindingResult result) { if(result.hasErrors()) { return "spittle/form"; In Spring MVC } controller spitterService.addSpittle(spittle); return "redirect:/home"; } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 90. ETag Support E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 91. ETag Support ShallowEtagHeaderFilter E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 92. ETag Support ShallowEtagHeaderFilter <filter> <filter-name>etagFilter</filter-name> <filter-class> org.springframework.web.filter.ShallowEtagHeaderFilter </filter-class> </filter> <filter-mapping> <filter-name>etagFilter</filter-name> <servlet-name>spitter</servlet-name> </filter-mapping> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 93. ETag Support ShallowEtagHeaderFilter <filter> <filter-name>etagFilter</filter-name> <filter-class> org.springframework.web.filter.ShallowEtagHeaderFilter </filter-class> </filter> <filter-mapping> <filter-name>etagFilter</filter-name> <servlet-name>spitter</servlet-name> </filter-mapping> Returns HTTP 304 if content is unmodified if-none-match (MD5 Hash comparison) Saves bandwidth E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 94. HTTP Method Conversion E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 95. HTTP Method Conversion HTTP defines four methods: GET, POST, DELETE, and PUT E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 96. HTTP Method Conversion HTTP defines four methods: GET, POST, DELETE, and PUT HTML only supports 2: GET and POST E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 97. HTTP Method Conversion HTTP defines four methods: GET, POST, DELETE, and PUT HTML only supports 2: GET and POST Spring 3’s HiddenHttpMethodFilter fixes that E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 98. HTTP Method Conversion HTTP defines four methods: GET, POST, DELETE, and PUT HTML only supports 2: GET and POST Spring 3’s HiddenHttpMethodFilter fixes that <filter> <filter-name>hiddenMethodFilter</filter-name> <filter-class> org.springframework.web.filter.HiddenHttpMethodFilter </filter-class> </filter> <filter-mapping> <filter-name>hiddenMethodFilter</filter-name> <servlet-name>spitter</servlet-name> </filter-mapping> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 99. HTTP Methods in Spring MVC E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 100. HTTP Methods in Spring MVC Spring MVC form tags support hidden HTTP methods E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 101. HTTP Methods in Spring MVC Spring MVC form tags support hidden HTTP methods <form:form method="delete"> <p class="submit"><input type="submit" value="Delete Spittle"/></p> </form:form> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 102. HTTP Methods in Spring MVC Spring MVC form tags support hidden HTTP methods <form:form method="delete"> <p class="submit"><input type="submit" value="Delete Spittle"/></p> </form:form> Controllers can handle all HTTP methods E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 103. HTTP Methods in Spring MVC Spring MVC form tags support hidden HTTP methods <form:form method="delete"> <p class="submit"><input type="submit" value="Delete Spittle"/></p> </form:form> Controllers can handle all HTTP methods @RequestMapping(method = RequestMethod.DELETE) public String deleteSpittle(@PathVariable long spittleId) { spittleService.deleteSpittle(spittleId); return "redirect:/home"; } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 104. Content negotiation E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 105. Content negotiation ContentNegotiatingViewResolver Chooses a view based on HTTP Accepts header, JAF content type, format parameter, or request path extension E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 106. Content negotiation ContentNegotiatingViewResolver Chooses a view based on HTTP Accepts header, JAF content type, format parameter, or request path extension New view resolvers AbstractAtomFeedView AbstractRssFeedView MarshallingView MappingJacksonJsonView E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 107. REST consumption E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 108. REST consumption New RestTemplate E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 109. REST consumption New RestTemplate Read RestTemplate template = new RestTemplate(); template.getForObject("http://localhost:8080/spitter/users/${id}", String.class, userId); E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 110. REST consumption New RestTemplate Read RestTemplate template = new RestTemplate(); template.getForObject("http://localhost:8080/spitter/users/${id}", String.class, userId); Create RestTemplate template = new RestTemplate(); SpitterUser user = new SpitterUser(userName, password); template.postForLocation("http://localhost:8080/spitter/users/${id}", user, userId); E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 111. REST consumption New RestTemplate Read RestTemplate template = new RestTemplate(); template.getForObject("http://localhost:8080/spitter/users/${id}", String.class, userId); Create RestTemplate template = new RestTemplate(); SpitterUser user = new SpitterUser(userName, password); template.postForLocation("http://localhost:8080/spitter/users/${id}", user, userId); Delete RestTemplate template = new RestTemplate(); template.delete("http://localhost:8080/spitter/users/${id}", userId); E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 112. JavaConfig E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 113. JavaConfig @Configuration public class PeanutsConfiguration { @Bean public Linus linus() { Linus linus = new Linus(); linus.setBlanket(blanket()); return linus; } @Bean private Blanket blanket() { Blanket blanket = new Blanket(); blanket.setColor("blue"); return blanket; } } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 114. JavaConfig in Components E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 115. JavaConfig in Components @Component public class KiteEatingTree implements DeciduousTree { public void shedLeaves() { // ... } @Bean public Kite kite() { return new Kite(); } } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 116. Asynchronous Methods E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 117. Asynchronous Methods Annotate a bean method @Async public void backgroundJob() { ... } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 118. Asynchronous Methods Annotate a bean method @Async public void backgroundJob() { ... } In Spring configuration: <task:annotation-driven/> E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 119. Scheduling E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 120. Scheduling @Scheduled(fixedDelay=3000L) public void ping() { ... } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 121. Scheduling @Scheduled(fixedDelay=3000L) public void ping() { ... } @Scheduled(fixedRate=3000L) public void ping() { ... } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 122. Scheduling @Scheduled(fixedDelay=3000L) public void ping() { ... } @Scheduled(fixedRate=3000L) public void ping() { ... } @Scheduled(cron="0 0 0 * * SAT) public void ping() { ... } E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 123. Miscellaneous E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 124. Miscellaneous Object-to-XML mapping from Spring-WS E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 125. Miscellaneous Object-to-XML mapping from Spring-WS Embracing Java 5 (generics, autoboxing, annotations, etc). E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 126. What’s going away
  • 127. Bye bye E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 128. Bye bye Spring MVC controller hierarchy (deprecated) E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 129. Bye bye Spring MVC controller hierarchy (deprecated) JUnit 3 testing E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 130. Bye bye Spring MVC controller hierarchy (deprecated) JUnit 3 testing Commons Attributes E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 131. Bye bye Spring MVC controller hierarchy (deprecated) JUnit 3 testing Commons Attributes Native TopLink support E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 132. Bye bye Spring MVC controller hierarchy (deprecated) JUnit 3 testing Commons Attributes Native TopLink support WebLogic 8.1 and WebSphere 5.1 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 133. Bye bye Spring MVC controller hierarchy (deprecated) JUnit 3 testing Commons Attributes Native TopLink support WebLogic 8.1 and WebSphere 5.1 spring.jar E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 134. Bye bye E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 136. Keep your eye on... E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 137. Keep your eye on... Spring Web Flow 2.0 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 138. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 139. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS Spring Security 3.0 E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 140. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS Spring Security 3.0 Spring Dynamic Modules (Spring-DM) E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 141. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS Spring Security 3.0 Spring Dynamic Modules (Spring-DM) SpringSource dm Server E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 142. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS Spring Security 3.0 Spring Dynamic Modules (Spring-DM) SpringSource dm Server SpringSource tc Server E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 143. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS Spring Security 3.0 Spring Dynamic Modules (Spring-DM) SpringSource dm Server SpringSource tc Server Roo E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 144. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS Spring Security 3.0 Spring Dynamic Modules (Spring-DM) SpringSource dm Server SpringSource tc Server Roo Groovy/Grails E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 145. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS Spring Security 3.0 Spring Dynamic Modules (Spring-DM) SpringSource dm Server SpringSource tc Server Roo Groovy/Grails SpringSource Tool Suite E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 147. Spring simplifies E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 148. Spring simplifies Spring’s initial focus was to simplify enterprise Java E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 149. Spring simplifies Spring’s initial focus was to simplify enterprise Java Now simplification efforts turn inward E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 150. Spring simplifies Spring’s initial focus was to simplify enterprise Java Now simplification efforts turn inward Trending away from XML toward annotations E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 151. Spring simplifies Spring’s initial focus was to simplify enterprise Java Now simplification efforts turn inward Trending away from XML toward annotations All the while, offering more power E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma
  • 152. Spring simplifies E-mail: [email protected] Blog: http://www.springinaction.com Twitter: habuma