What's new in Spring 3?
Upcoming SlideShare
Loading in...5
×
 

What's new in Spring 3?

on

  • 15,145 views

Craig Walls' presentation on what's to come in Spring 3 as given at Dallas Tech Fest 2009 in Frisco, TX, June 19, 2009.

Craig Walls' presentation on what's to come in Spring 3 as given at Dallas Tech Fest 2009 in Frisco, TX, June 19, 2009.

Statistics

Views

Total Views
15,145
Views on SlideShare
14,297
Embed Views
848

Actions

Likes
16
Downloads
475
Comments
1

6 Embeds 848

http://javaunderhood.wordpress.com 627
http://cetauri.tistory.com 114
http://www.slideshare.net 101
http://www.hanrss.com 3
http://www.365dailyjournal.com 2
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    What's new in Spring 3? What's new in Spring 3? Presentation Transcript

    • 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!