Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spring 3.1 in a Nutshell - JAX London 2011

4,725 views

Published on

Covers new features in Spring 3.1 up through RC1.

Published in: Technology, Education
  • Be the first to comment

Spring 3.1 in a Nutshell - JAX London 2011

  1. 1. Spring 3.1 in a Nutshell Sam Brannen / Swiftmind
  2. 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. 3. Agenda•  Major Themes in 3.x•  Environment and Profiles•  Java-based Configuration•  Testing•  Caching•  MVC and REST•  Servlet 3.0•  Odds & Ends
  4. 4. Major Themes in Spring 3.0
  5. 5. Java-based configuration
  6. 6. custom stereotypes
  7. 7. annotated factory methods
  8. 8. JSR-330 – DI for Java
  9. 9. Spring Expression Language
  10. 10. REST support in Spring MVC
  11. 11. Portlet API 2.0
  12. 12. JSR-303 – bean validation
  13. 13. Java EE 6 support: JPA 2.0, JSF 2.0
  14. 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
  15. 15. Environment and Profiles
  16. 16. Environment Abstraction–  Injectable environment abstraction API •  org.springframework.core.env.Environment–  Two core concepts •  Property Sources •  Bean ProfilesProperty Source: Bean Profile:A variety of sources: property A logical group of beanfiles, system properties, definitions. Registered only ifservlet context, JNDI, etc. the profile is active.
  17. 17. Property Source Abstraction–  Property source–  Property resolution–  Placeholders
  18. 18. PropertySource(s)–  PropertySource •  a single property source–  PropertySources •  a hierarchy of PropertySource objects •  potentially varying across deployment environments
  19. 19. Property Resolution SPI–  org.springframework.core.env.PropertyResolver–  Environment extends PropertyResolver
  20. 20. Custom resolution of placeholders–  dependent on the actual environment–  PropertySourcesPlaceholderConfigurer supersedes PropertyPlaceholderConfigurer
  21. 21. Managing Property Sources–  Stand-alone code–  Web application •  Implement ApplicationContextInitializer •  Register via contextInitializerClasses context parameter in web.xml
  22. 22. Accessing Properties–  By injecting the Environment
  23. 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
  24. 24. Configuring Profiles in XML–  All bean definitions–  Subset of bean definitions
  25. 25. Configuring Profiles in Java Config 25–  @Profile can also be used on components •  @Component, @Service, @Repository, etc.
  26. 26. Profile Activation Options–  programmatically–  system property–  in web.xml–  in tests via @ActiveProfiles
  27. 27. Activating Profiles… programmatically
  28. 28. Activating Profiles… via system properties-Dspring.profiles.active=“dev”-Dspring.profiles.default=“common”
  29. 29. Activating Profiles… in web apps
  30. 30. Activating Profiles… in integration tests
  31. 31. Java-based Configuration
  32. 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
  33. 33. Typical Infrastructure Setup–  Transactions–  Scheduling–  MVC customization–  AOP
  34. 34. @Enable* Annotations–  Applied at the class-level on @Configuration classes–  Roughly equivalent to their XML namespace counterparts
  35. 35. @Enable* in 3.1 RC1–  @EnableTransactionManagement–  @EnableAsync–  @EnableScheduling–  @EnableAspectJAutoProxy–  @EnableLoadTimeWeaving–  @EnableWebMvc
  36. 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
  37. 37. Java Configuration Example Actually: LocalSessionFactoryBuilder
  38. 38. New Testing Features in 3.1–  @Configuration class support–  Environment profile support–  SmartContextLoader–  AnnotationConfigContextLoader–  DelegatingSmartContextLoader–  Updated context cache key generation
  39. 39. SmartContextLoader SPI–  Supersedes ContextLoader–  Strategy for loading application contexts–  From @Configuration classes or resource locations–  Supports environment profiles
  40. 40. @ContextConfigurationaccepts a new `classes` attribute...
  41. 41. Ex: @Configuration Test #1
  42. 42. Ex: @Configuration Test #2
  43. 43. Caching
  44. 44. Caching Abstraction–  Declarative caching for Spring applications •  Minimal impact on code •  Plug in various caching solutions–  Key annotations @Cacheable and @CacheEvict
  45. 45. Cache Key–  All method arguments used by default–  Use SpEL to select more specifically (use class, method, or argument name)
  46. 46. Conditional Caching
  47. 47. Cache Providers (1/2)–  Cache and CacheManager SPI •  org.springframework.cache–  Cache Implementations •  EhCacheCache •  ConcurrentMapCache and ConcurrentMapCacheFactoryBean
  48. 48. Cache Providers (2/2)–  CacheManager Implementations •  EhCacheCacheManager •  ConcurrentMapCacheManager •  SimpleCacheManager •  NoOpCacheManager–  Any other implementation can be plugged in •  GemFire, Coherence, etc.
  49. 49. Cache Configuration–  Cache namespace •  <cache:annotation-driven /> •  “cacheManager” bean
  50. 50. MVC and REST
  51. 51. @MVC 3.0 Config–  Built-in defaults •  Based on DispatcherServlet.properties–  Spring MVC namespace •  <mvc:annotation:driven>, <mvc:interceptors>, …
  52. 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. 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. 54. A More Complete Example …–  Add component scanning for @Controllers and other beans
  55. 55. Q: Where is the “Enabled” Configuration ?!–  A: a framework-provided @Configuration class (actually DelegatingWebMvcConfiguration)
  56. 56. How Do I Customize All This?–  Simply implement the WebMvcConfigurer interface Allows selective overriding
  57. 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. 58. Path Variables in the Model–  @PathVariable arguments automatically added to the model These can be deleted
  59. 59. URI Templates in Redirect Strings–  URL templates supported in “redirect:” strings Expanded from model attributes, which now include @PathVariables
  60. 60. URI Template Variables in Data Binding–  URI template variables used in data binding
  61. 61. Matching MediaTypes < @MVC 3.1 –  Using the headers condition
  62. 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)
  63. 63. Servlet 3.0
  64. 64. Servlet 3.0 Containers•  Tomcat 7 and GlassFish 3 –  Explicitly supported•  While preserving compatibility with Servlet 2.4+
  65. 65. XML-free Web-app Config•  Support for XML-free web application setup –  no web.xml•  Made possible via: –  Servlet 3.0s ServletContainerInitializer –  Spring 3.1s AnnotationConfigWebApplicationContext –  Spring 3.1’s environment abstraction
  66. 66. Native Servlet 3.0 in @MVC•  Asynchronous request processing•  Standard Servlet 3.0 file upload –  behind Springs MultipartResolver abstraction
  67. 67. Odds & Ends
  68. 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 applications class files
  69. 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. 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. 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. 72. Blogs•  SpringSource Team Blog – category 3.1 –  http://blog.springsource.com/category/spring/31/•  Swiftmind Blog –  http://www.swiftmind.com/blog/
  73. 73. Q&ASam Brannen twitter: @sam_brannenSwiftmind www.slideshare.net/sbrannen www.swiftmind.com“Spring in a Nutshell”http://oreilly.com/catalog/9780596801946available from O’Reilly in 2012

×