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