what's new in spring 3?
Post on 25-May-2015
11.490 Views
Preview:
DESCRIPTION
TRANSCRIPT
What’s New in Spring 3
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
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 fanaticPrincipal Consultant with Improving
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Who Am I?
Java, Spring, and OSGi fanaticPrincipal Consultant with Improving
AuthorXDoclet 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 fanaticPrincipal Consultant with Improving
AuthorXDoclet in Action (Manning)
Spring in Action (Manning)
Modular Java (Pragmatic Bookshelf)
Where we’ve been
Spring: This is your life!
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Evolution of Spring
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Evolution of Spring
<bean class="..."></bean>
Spring 1.x
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Evolution of Spring
<bean class="..."></bean>
<tx:/>
Spring 1.x
Spring 2.0
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Evolution of Spring
<bean class="..."></bean>
<tx:/>
Spring 1.x
Spring 2.0
@Component@Autowired
Spring 2.5
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Evolution of Spring
<bean class="..."></bean>
<tx:/>
Spring 1.x
Spring 2.0
@Component@Autowired
Spring 2.5
Spring 3.0?
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Evolution of Spring
<bean class="..."></bean>
<tx:/>
Spring 1.x
Spring 2.0
@Component@Autowired
Spring 2.5
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@Componentpublic class Linus { @Autowired private Blanket blanket;
public Blanket getBlanket() { return blanket; }}
Java:
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Annotation-Driven Wiring@Componentpublic class Linus { @Autowired private Blanket blanket;
public Blanket getBlanket() { return blanket; }}
Java:
Spring: Context
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Annotation-Driven Wiring@Componentpublic class Linus { @Autowired private Blanket blanket;
public Blanket getBlanket() { return blanket; }}
<context:component-scan base-package="com.springinaction.peanuts" />
Java:
Spring: Context
What’s new in Spring 3?
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Spring Expression Language
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Spring Expression Language
Wires values evaluated from expressionsWorks in XML and annotations
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Spring Expression Language
Wires values evaluated from expressionsWorks 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 expressionsWorks in XML and annotations
@Componentpublic 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 IDsystemProperties
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Expression variables
Any bean IDsystemProperties
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 examplesReferencing bean properties
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
SpEL examplesReferencing bean properties
"#{settingBean.databaseUrl}"
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
SpEL examplesReferencing bean properties
"#{settingBean.databaseUrl}"
Referencing system properties
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
SpEL examplesReferencing bean properties
"#{settingBean.databaseUrl}"
Referencing system properties"#{systemProperties.favoriteColor}"
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
SpEL examplesReferencing bean properties
"#{settingBean.databaseUrl}"
Referencing system properties"#{systemProperties.favoriteColor}"
Evaluating truth
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
SpEL examplesReferencing 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 examplesReferencing 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 examplesReferencing 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 examplesReferencing 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 examplesReferencing 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:@Controllerpublic 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:@Controllerpublic 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:@Controllerpublic 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:@Controllerpublic 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:@Controllerpublic 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:@Controllerpublic 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 tagGenerates context-senstive URL
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
<spring:url>
New JSP tagGenerates 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
@RequestMapping(method=POST) public String addSpittle( @Valid Spittle spittle, BindingResult result) { if(result.hasErrors()) { return "spittle/form"; } spitterService.addSpittle(spittle); return "redirect:/home"; }
In Spring MVCcontroller
@Column(name="spittleText") @NotNull @Size(min=1, max=140) public String getText() { return this.text; }
In entityclass
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
<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>
ShallowEtagHeaderFilter
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
ETag Support
<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>
ShallowEtagHeaderFilter
Returns HTTP 304 if content is unmodifiedif-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 ConversionHTTP defines four methods:
GET, POST, DELETE, and PUT
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
HTTP Method ConversionHTTP defines four methods:
GET, POST, DELETE, and PUTHTML only supports 2:
GET and POST
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
HTTP Method ConversionHTTP defines four methods:
GET, POST, DELETE, and PUTHTML only supports 2:
GET and POSTSpring 3’s HiddenHttpMethodFilter fixes that
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
HTTP Method ConversionHTTP defines four methods:
GET, POST, DELETE, and PUTHTML only supports 2:
GET and POSTSpring 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
ContentNegotiatingViewResolverChooses 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
ContentNegotiatingViewResolverChooses a view based on HTTP Accepts header, JAF
content type, format parameter, or request path extension
New view resolversAbstractAtomFeedViewAbstractRssFeedView
MarshallingViewMappingJacksonJsonView
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
ReadRestTemplate 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
ReadRestTemplate 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
ReadRestTemplate template = new RestTemplate();template.getForObject("http://localhost:8080/spitter/users/${id}", String.class, userId);
Delete RestTemplate template = new RestTemplate();template.delete("http://localhost:8080/spitter/users/${id}", 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
JavaConfig
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
JavaConfig@Configurationpublic 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
@Componentpublic 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
@Asyncpublic void backgroundJob(){ ... }
Annotate a bean method
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Asynchronous Methods
@Asyncpublic void backgroundJob(){ ... }
<task:annotation-driven/>
Annotate a bean method
In Spring configuration:
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-WSEmbracing Java 5 (generics, autoboxing,
annotations, etc).
What’s going away
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
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 testingCommons Attributes
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Bye bye
Spring MVC controller hierarchy (deprecated)
JUnit 3 testingCommons 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 testingCommons Attributes
Native TopLink supportWebLogic 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 testingCommons Attributes
Native TopLink supportWebLogic 8.1 and WebSphere 5.1
spring.jar
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Bye bye
What else?
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
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.0Spring BlazeDS
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Keep your eye on...
Spring Web Flow 2.0Spring 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.0Spring BlazeDS
Spring Security 3.0Spring Dynamic Modules (Spring-DM)
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Keep your eye on...
Spring Web Flow 2.0Spring BlazeDS
Spring Security 3.0Spring 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.0Spring BlazeDS
Spring Security 3.0Spring Dynamic Modules (Spring-DM)
SpringSource dm ServerSpringSource tc Server
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Keep your eye on...
Spring Web Flow 2.0Spring BlazeDS
Spring Security 3.0Spring Dynamic Modules (Spring-DM)
SpringSource dm ServerSpringSource tc Server
Roo
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Keep your eye on...
Spring Web Flow 2.0Spring BlazeDS
Spring Security 3.0Spring Dynamic Modules (Spring-DM)
SpringSource dm ServerSpringSource tc Server
RooGroovy/Grails
E-mail: craig@habuma.com Blog: http://www.springinaction.com Twitter: habuma
Keep your eye on...
Spring Web Flow 2.0Spring BlazeDS
Spring Security 3.0Spring Dynamic Modules (Spring-DM)
SpringSource dm ServerSpringSource tc Server
RooGroovy/Grails
SpringSource Tool Suite
In summary...
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
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 inwardTrending 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 inwardTrending 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
Thank You
Don’t forget the evals!
top related