SlideShare une entreprise Scribd logo
1  sur  153
Télécharger pour lire hors ligne
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!

Contenu connexe

Tendances

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 RubyFabio 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 2015Andy 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 - StockholmAndy 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 FastAndy 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 designDee 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 2016Andy 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 presentationmasudakram
 
Sniffing the Mobile Context
Sniffing the Mobile ContextSniffing the Mobile Context
Sniffing the Mobile ContextAndy 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 2014Bastian 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 2014Bastian Grimm
 
Word campktm speed-security
Word campktm speed-securityWord campktm speed-security
Word campktm speed-securityDigamber 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 BeyondDawn 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 librariesSimon 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 2014Bastian 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 2016Matt Raible
 

Tendances (20)

The web is too slow
The web is too slow The web is too slow
The web is too slow
 
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
 
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
 
Speed Matters!
Speed Matters!Speed Matters!
Speed Matters!
 
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
 
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
 
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 ?
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
 
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
 
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
 
Sniffing the Mobile Context
Sniffing the Mobile ContextSniffing the Mobile Context
Sniffing the Mobile Context
 
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
 
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
 
Word campktm speed-security
Word campktm speed-securityWord campktm speed-security
Word campktm speed-security
 
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 ...
 
Introduction to HTML5 & CSS3
Introduction to HTML5 & CSS3Introduction to HTML5 & CSS3
Introduction to HTML5 & CSS3
 
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
 
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
 
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
 
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
 

En vedette

Spring MVC Architecture Tutorial
Spring MVC Architecture TutorialSpring MVC Architecture Tutorial
Spring MVC Architecture TutorialJava Success Point
 
Spring mvc my Faviourite Slide
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite SlideDaniel Adenew
 
02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questionsDhiraj 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 tutorialsRaghavan Mohan
 
Spring 3 Annotated Development
Spring 3 Annotated DevelopmentSpring 3 Annotated Development
Spring 3 Annotated Developmentkensipe
 
Spring @Transactional Explained
Spring @Transactional ExplainedSpring @Transactional Explained
Spring @Transactional ExplainedSmita Prasad
 
MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCAnton 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 HoellerZeroTurnaround
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVCRichard Paul
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overviewzerovirus23
 
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 topicsGuy Nir
 
Spring Mvc,Java, Spring
Spring Mvc,Java, SpringSpring Mvc,Java, Spring
Spring Mvc,Java, Springifnu 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 SessionDavid Gómez García
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVCGuy Nir
 

En vedette (18)

Spring MVC Architecture Tutorial
Spring MVC Architecture TutorialSpring MVC Architecture Tutorial
Spring MVC Architecture Tutorial
 
Spring Mvc Rest
Spring Mvc RestSpring Mvc Rest
Spring Mvc Rest
 
Spring mvc my Faviourite Slide
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite Slide
 
02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questions
 
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
 
Spring 3 Annotated Development
Spring 3 Annotated DevelopmentSpring 3 Annotated Development
Spring 3 Annotated Development
 
Spring @Transactional Explained
Spring @Transactional ExplainedSpring @Transactional Explained
Spring @Transactional Explained
 
MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVC
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
 
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
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overview
 
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
 
Spring Mvc,Java, Spring
Spring Mvc,Java, SpringSpring Mvc,Java, Spring
Spring Mvc,Java, Spring
 
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
 
Spring 4 - A&BP CC
Spring 4 - A&BP CCSpring 4 - A&BP CC
Spring 4 - A&BP CC
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVC
 
Spring 4 Web App
Spring 4 Web AppSpring 4 Web App
Spring 4 Web App
 

Dernier

A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 

Dernier (20)

A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

What's new in Spring 3?

  • 1. What’s New in Spring 3
  • 2. Who Am I? E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 3. Who Am I? Java, Spring, and OSGi fanatic E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 4. Who Am I? Java, Spring, and OSGi fanatic Principal Consultant with Improving E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 7. Where we’ve been Spring: This is your life!
  • 8. Evolution of Spring E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 9. Evolution of Spring Spring 1.x <bean class="..."> </bean> E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. Spring 1.0 E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 15. Spring 1.0 Dependency injection E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 16. Spring 1.0 Dependency injection POJO-oriented development E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 17. Spring 1.0 Dependency injection POJO-oriented development Declarative AOP and transactions E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 18. 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
  • 19. Spring 2.0 E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 20. Spring 2.0 Problem-specific XML E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 21. Spring 2.0 Problem-specific XML Extensible configuration E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 22. Spring 2.0 Problem-specific XML Extensible configuration Bean scoping E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 23. 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
  • 24. 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
  • 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 26. Spring 2.5 E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 27. Spring 2.5 Annotation-driven wiring E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 28. Spring 2.5 Annotation-driven wiring Automatic bean configuration E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 29. 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
  • 30. 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
  • 31. Spring 1.0 E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 33. Spring 1.1 E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 35. Spring 2.0 E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 37. Spring 2.5 E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 39. Annotation-Driven Wiring E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 40. Annotation-Driven Wiring Java: E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 44. What’s new in Spring 3?
  • 45. Spring Expression Language E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 46. 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
  • 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 49. Expression variables E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 50. Expression variables Any bean ID E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 51. Expression variables Any bean ID systemProperties E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 52. 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
  • 53. SpEL examples E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 54. SpEL examples Referencing bean properties E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 55. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 56. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 57. SpEL examples Referencing bean properties "#{settingBean.databaseUrl}" Referencing system properties "#{systemProperties.favoriteColor}" E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 58. 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
  • 59. 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
  • 60. 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
  • 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 64. One more SpEL example E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 65. One more SpEL example Collection projection E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 66. One more SpEL example Collection projection "#{snoopyPersonas.![name]}" E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 67. @PathVariable E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 70. @RequestHeader E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 73. @CookieValue E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 76. default values E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 77. default values New for @RequestParam @RequestParam(value="productId", defaultValue="1234") String productId E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 81. <spring:url> E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 82. <spring:url> New JSP tag Generates context-senstive URL E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 84. Declarative Validation E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 85. Declarative Validation Based on JSR-303 validators E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 86. Declarative Validation Based on JSR-303 validators Hibernate Validator as default implementation E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 90. ETag Support E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 91. ETag Support ShallowEtagHeaderFilter E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 94. HTTP Method Conversion E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 95. HTTP Method Conversion HTTP defines four methods: GET, POST, DELETE, and PUT E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 99. HTTP Methods in Spring MVC E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 100. 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
  • 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 104. Content negotiation E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 107. REST consumption E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 108. REST consumption New RestTemplate E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 112. JavaConfig E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 114. JavaConfig in Components E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 116. Asynchronous Methods E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 117. Asynchronous Methods Annotate a bean method @Async public void backgroundJob() { ... } E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 119. Scheduling E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 120. Scheduling @Scheduled(fixedDelay=3000L) public void ping() { ... } E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 121. 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
  • 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 123. Miscellaneous E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 124. Miscellaneous Object-to-XML mapping from Spring-WS E-mail: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 126. What’s going away
  • 127. Bye bye E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 128. Bye bye Spring MVC controller hierarchy (deprecated) E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 129. Bye bye Spring MVC controller hierarchy (deprecated) JUnit 3 testing E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 130. Bye bye Spring MVC controller hierarchy (deprecated) JUnit 3 testing Commons Attributes E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 134. Bye bye E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 136. Keep your eye on... E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 137. Keep your eye on... Spring Web Flow 2.0 E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 138. Keep your eye on... Spring Web Flow 2.0 Spring BlazeDS E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 147. Spring simplifies E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 148. Spring simplifies Spring’s initial focus was to simplify enterprise Java E-mail: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com 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: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
  • 152. Spring simplifies E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma