spring day | spring 3.1 in a nutshell | sam brannen

73
Spring 3.1 in a Nutshell Sam Brannen / Swiftmind

Upload: jax-london

Post on 15-May-2015

1.524 views

Category:

Technology


0 download

DESCRIPTION

2011-10-31 | 11:45 AM - 12:30 PMSpring 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.

TRANSCRIPT

Page 1: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Spring 3.1 in a Nutshell Sam Brannen / Swiftmind

Page 2: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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”

Page 3: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Agenda •  Major Themes in 3.x •  Environment and Profiles •  Java-based Configuration •  Testing •  Caching •  MVC and REST •  Servlet 3.0 •  Odds & Ends

Page 4: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Major Themes in Spring 3.0

Page 5: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Java-based configuration

Page 6: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

custom stereotypes

Page 7: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

annotated factory methods

Page 8: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

JSR-330 – DI for Java

Page 9: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Spring Expression Language

Page 10: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

REST support in Spring MVC

Page 11: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Portlet API 2.0

Page 12: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

JSR-303 – bean validation

Page 13: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Java EE 6 support: JPA 2.0, JSF 2.0

Page 14: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

– 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

Major Themes in Spring 3.1

Page 15: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Environment and Profiles

Page 16: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Environment Abstraction –  Injectable environment abstraction API

•  org.springframework.core.env.Environment

– Two core concepts •  Property Sources •  Bean Profiles

Property Source: A variety of sources: property files, system properties, servlet context, JNDI, etc.

Bean Profile: A logical group of bean definitions. Registered only if the profile is active.

Page 17: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Property Source Abstraction

– Property source

– Property resolution

– Placeholders

Page 18: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

PropertySource(s)

– PropertySource •  a single property source

– PropertySources •  a hierarchy of PropertySource objects •  potentially varying across deployment environments

Page 19: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Property Resolution SPI

– org.springframework.core.env.PropertyResolver

– Environment extends PropertyResolver

Page 20: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Custom resolution of placeholders

– dependent on the actual environment

– PropertySourcesPlaceholderConfigurer supersedes PropertyPlaceholderConfigurer

Page 21: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

– Stand-alone code

– Web application •  Implement ApplicationContextInitializer •  Register via contextInitializerClasses context

parameter in web.xml

Managing Property Sources

Page 22: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Accessing Properties

– By injecting the Environment

Page 23: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

Page 24: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Configuring Profiles in XML

– All bean definitions

– Subset of bean definitions

Page 25: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

25

Configuring Profiles in Java Config

– @Profile can also be used on components

•  @Component, @Service, @Repository, etc.

Page 26: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Profile Activation Options

– programmatically

– system property

–  in web.xml

–  in tests via @ActiveProfiles

Page 27: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Activating Profiles… programmatically

Page 28: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Activating Profiles… via system properties

-Dspring.profiles.active=“dev”

-Dspring.profiles.default=“common”

Page 29: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Activating Profiles… in web apps

Page 30: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Activating Profiles… in integration tests

Page 31: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Java-based Configuration

Page 32: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

Page 33: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Typical Infrastructure Setup

– Transactions

– Scheduling

– MVC customization

– AOP

Page 34: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

@Enable* Annotations

– Applied at the class-level on @Configuration classes

– Roughly equivalent to their XML namespace counterparts

Page 35: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

@Enable* in 3.1 RC1

– @EnableTransactionManagement – @EnableAsync – @EnableScheduling – @EnableAspectJAutoProxy – @EnableLoadTimeWeaving – @EnableWebMvc

Page 36: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

Page 37: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Java Configuration Example

Actually: LocalSessionFactoryBuilder

Page 38: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

New Testing Features in 3.1

– @Configuration class support – Environment profile support – SmartContextLoader – AnnotationConfigContextLoader – DelegatingSmartContextLoader – Updated context cache key generation

Page 39: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

SmartContextLoader SPI

– Supersedes ContextLoader – Strategy for loading application contexts – From @Configuration classes or resource

locations – Supports environment profiles

Page 40: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

@ContextConfiguration

accepts a new `classes` attribute...

Page 41: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Ex: @Configuration Test #1

Page 42: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Ex: @Configuration Test #2

Page 43: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Caching

Page 44: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Caching Abstraction

– Declarative caching for Spring applications •  Minimal impact on code •  Plug in various caching solutions

– Key annotations @Cacheable and

@CacheEvict

Page 45: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Cache Key

– All method arguments used by default

– Use SpEL to select more specifically (use class, method, or argument name)

Page 46: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Conditional Caching

Page 47: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Cache Providers (1/2)

– Cache and CacheManager SPI •  org.springframework.cache

– Cache Implementations •  EhCacheCache •  ConcurrentMapCache and

ConcurrentMapCacheFactoryBean

Page 48: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Cache Providers (2/2)

– CacheManager Implementations •  EhCacheCacheManager •  ConcurrentMapCacheManager •  SimpleCacheManager •  NoOpCacheManager

– Any other implementation can be plugged in •  GemFire, Coherence, etc.

Page 49: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Cache Configuration

– Cache namespace •  <cache:annotation-driven /> •  “cacheManager” bean

Page 50: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

MVC and REST

Page 51: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

@MVC 3.0 Config – Built-in defaults

•  Based on DispatcherServlet.properties

– Spring MVC namespace •  <mvc:annotation:driven>, <mvc:interceptors>, …

Page 52: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

– … What should a Java equivalent to the MVC namespace look like?

Page 53: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

@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

Page 54: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

A More Complete Example … – Add component scanning for @Controllers

and other beans

Page 55: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Q: Where is the “Enabled” Configuration ?!

– A: a framework-provided @Configuration class (actually DelegatingWebMvcConfiguration)

Page 56: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

How Do I Customize All This?

– Simply implement the WebMvcConfigurer interface Allows selective overriding

Page 57: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

Page 58: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Path Variables in the Model

– @PathVariable arguments automatically added to the model

These can be deleted

Page 59: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

URI Templates in Redirect Strings

– URL templates supported in “redirect:” strings

Expanded from model attributes, which now include @PathVariables

Page 60: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

URI Template Variables in Data Binding

– URI template variables used in data binding

Page 61: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Matching MediaTypes < @MVC 3.1

– Using the 'headers' condition

Page 62: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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)

Page 63: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Servlet 3.0

Page 64: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Servlet 3.0 Containers

•  Tomcat 7 and GlassFish 3 – Explicitly supported

•  While preserving compatibility with Servlet 2.4+

Page 65: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

Page 66: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Native Servlet 3.0 in @MVC

•  Asynchronous request processing

•  Standard Servlet 3.0 file upload – behind Spring's MultipartResolver abstraction

Page 67: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Odds & Ends

Page 68: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

"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

Page 69: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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.

Page 70: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

Page 71: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Further Resources

•  Spring Framework – http://springframework.org – Spring Reference Manual – JavaDoc

•  Spring Forums – http://forum.springframework.org

•  Spring JIRA – http://jira.springframework.org

Page 72: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

Blogs

•  SpringSource Team Blog – category 3.1 – http://blog.springsource.com/category/spring/31/

•  Swiftmind Blog – http://www.swiftmind.com/blog/

Page 73: Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

Q&A