2011-10-31 | 11:45 AM - 12:30 PM
Spring 3.1 introduces several eagerly awaited features including bean definition profiles (a.k.a., environment-specific configuration), enhanced Java-based application and infrastructure configuration (a la XML namespaces), and a new cache abstraction. This session will provide attendees with a high-level overview of these major new features, plus a quick look at additional enhancements to the framework such as the new c: namespace for constructor arguments, support for Servlet 3.0, improvements to Spring MVC and REST, and Spring's new integration testing support for profiles and configuration classes.
2. Speaker Profile
• Spring & Java consultant @ Swiftmind
• Developing Java for over 13 years
• Spring Framework Core Developer
• Spring Trainer
• Lead author of “Spring in a Nutshell”
3. Agenda
• Major Themes in 3.x
• Environment and Profiles
• Java-based Configuration
• Testing
• Caching
• MVC and REST
• Servlet 3.0
• Odds & Ends
14. Major Themes in Spring 3.1
– Environment abstraction
– Java-based application configuration
– @Configuration class test support
– High-level cache API
– Customizable @MVC processing
– Flash maps and redirect attributes
– Explicit support for Servlet 3.0
16. Environment Abstraction
– Injectable environment abstraction API
• org.springframework.core.env.Environment
– Two core concepts
• Property Sources
• Bean Profiles
Property Source: Bean Profile:
A variety of sources: property A logical group of bean
files, system properties, definitions. Registered only if
servlet context, JNDI, etc. the profile is active.
18. PropertySource(s)
– PropertySource
• a single property source
– PropertySources
• a hierarchy of PropertySource objects
• potentially varying across deployment environments
20. Custom resolution of
placeholders
– dependent on the actual environment
– PropertySourcesPlaceholderConfigurer
supersedes PropertyPlaceholderConfigurer
21. Managing Property Sources
– Stand-alone code
– Web application
• Implement ApplicationContextInitializer
• Register via contextInitializerClasses context
parameter in web.xml
23. Bean Definition Profiles
– Logical grouping of bean definitions
• for activation in specific environments
• e.g., dev, staging, prod
• possibly different deployment platforms
– Configuration
• XML via <beans profile=“…”>
• Java-based configuration via @Profile
32. Java Config ~= XML
– XML namespaces à @Enable*
– FactoryBeans à builders
– GenericXmlContextLoader à
AnnotationConfigContextLoader
– Not a one-to-one mapping
• Make the most of what Java has to offer
• Intuitive annotation-oriented container configuration
36. Hibernate and JPA
– Hibernate LocalSessionFactoryBuilder API
• Hibernate 4 replacement for both
LocalSessionFactoryBean and
AnnotationSessionFactoryBean
– XML-free JPA configuration
• LocalContainerEntityManagerFactoryBean has a
new property
• packagesToScan: analogous to
AnnotationSessionFactoryBean
38. New Testing Features in 3.1
– @Configuration class support
– Environment profile support
– SmartContextLoader
– AnnotationConfigContextLoader
– DelegatingSmartContextLoader
– Updated context cache key generation
39. SmartContextLoader SPI
– Supersedes ContextLoader
– Strategy for loading application contexts
– From @Configuration classes or resource
locations
– Supports environment profiles
44. Caching Abstraction
– Declarative caching for Spring applications
• Minimal impact on code
• Plug in various caching solutions
– Key annotations @Cacheable and
@CacheEvict
45. Cache Key
– All method arguments used by default
– Use SpEL to select more specifically (use class,
method, or argument name)
47. Cache Providers (1/2)
– Cache and CacheManager SPI
• org.springframework.cache
– Cache Implementations
• EhCacheCache
• ConcurrentMapCache and
ConcurrentMapCacheFactoryBean
48. Cache Providers (2/2)
– CacheManager Implementations
• EhCacheCacheManager
• ConcurrentMapCacheManager
• SimpleCacheManager
• NoOpCacheManager
– Any other implementation can be plugged in
• GemFire, Coherence, etc.
51. @MVC 3.0 Config
– Built-in defaults
• Based on DispatcherServlet.properties
– Spring MVC namespace
• <mvc:annotation:driven>, <mvc:interceptors>, …
52. Java-based @MVC 3.1 Config
– Most Spring MVC configuration is in Java
already
• @Controller, @RequestMapping, etc.
– Servlet 3.0 enhancements will further reduce
the need for web.xml
– XML namespace is convenient but …
• Not transparent
• Not easy to offer the right degree of customization
53. @EnableWebMvc
– Enables Spring MVC default configuration
• Registers components expected by the
DispatcherServlet
– Allows for configuration similar to the
Spring MVC namespace
• … and the DispatcherServlet.properties combined
54. A More Complete Example …
– Add component scanning for @Controllers
and other beans
55. Q: Where is the “Enabled”
Configuration ?!
– A: a framework-provided @Configuration class
(actually DelegatingWebMvcConfiguration)
56. How Do I Customize All This?
– Simply implement the WebMvcConfigurer
interface
Allows selective overriding
57. HandlerMethod Abstraction
– HandlerMethod
• A proper abstraction for the selected “handler” in Spring
MVC
– Not just for @RequestMapping methods
• Also @InitBinder, @ModelAttribute, @ExceptionHandler
methods
– “HandlerMethod” support classes
• RequestMappingHandlerMapping
• RequestMappingHandlerAdapter
• ExceptionHandlerExceptionResolver
58. Path Variables in the Model
– @PathVariable arguments automatically
added to the model
These can be deleted
59. URI Templates in Redirect
Strings
– URL templates supported in “redirect:”
strings
Expanded from model attributes,
which now include @PathVariables
62. Matching MediaTypes in @MVC 3.1
– The 'consumes' and 'produces' conditions
If not matched, results in:
UNSUPPORTED_MEDIA_TYPE (415)
If not matched, results in:
NOT_ACCEPTABLE (406)
64. Servlet 3.0 Containers
• Tomcat 7 and GlassFish 3
– Explicitly supported
• While preserving compatibility with Servlet
2.4+
65. XML-free Web-app Config
• Support for XML-free web application setup
– no web.xml
• Made possible via:
– Servlet 3.0's ServletContainerInitializer
– Spring 3.1's
AnnotationConfigWebApplicationContext
– Spring 3.1’s environment abstraction
68. "c:" Namespace
– Shortcut for <constructor-arg>
• inline argument values
• analogous to existing "p:" namespace
– Use of constructor argument names
• recommended for readability
• debug symbols have to be available in the
application's class files
69. The Spring Roadmap
• Spring 3.1 RC2: mid November
• Spring 3.1 GA: Before end of 2011
• Spring 3.2: Planned for early 2012
– Java EE: JSF 2.2, JPA 2.1, etc.
70. Spring 3.1 in a Nutshell
• Environment and Profiles
• Java-based Configuration and @Enable*
• Testing with @Configuration and Profiles
• Cache Abstraction
• MVC and REST Improvements
• Servlet 3.0
• c: Namespace
71. Further Resources
• Spring Framework
– http://springframework.org
– Spring Reference Manual
– JavaDoc
• Spring Forums
– http://forum.springframework.org
• Spring JIRA
– http://jira.springframework.org
72. Blogs
• SpringSource Team Blog – category 3.1
– http://blog.springsource.com/category/spring/31/
• Swiftmind Blog
– http://www.swiftmind.com/blog/
73. Q&A
Sam Brannen twitter: @sam_brannen
Swiftmind www.slideshare.net/sbrannen
www.swiftmind.com
“Spring in a Nutshell”
http://oreilly.com/catalog/9780596801946
available from O’Reilly in 2012