SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Downloaden Sie, um offline zu lesen
Spring 3.1 in a Nutshell
  Sam Brannen / Swiftmind
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”
Agenda
•    Major Themes in 3.x
•    Environment and Profiles
•    Java-based Configuration
•    Testing
•    Caching
•    MVC and REST
•    Servlet 3.0
•    Odds & Ends
Major Themes in Spring 3.0
Java-based configuration
custom stereotypes
annotated factory methods
JSR-330 – DI for Java
Spring Expression Language
REST support in Spring MVC
Portlet API 2.0
JSR-303 – bean validation
Java EE 6 support: JPA 2.0, JSF 2.0
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
Environment and Profiles
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.
Property Source Abstraction

–  Property source

–  Property resolution

–  Placeholders
PropertySource(s)

–  PropertySource
  •  a single property source


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

–  org.springframework.core.env.PropertyResolver

–  Environment extends PropertyResolver
Custom resolution of
          placeholders
–  dependent on the actual environment

–  PropertySourcesPlaceholderConfigurer
   supersedes PropertyPlaceholderConfigurer
Managing Property Sources

–  Stand-alone code




–  Web application
  •  Implement ApplicationContextInitializer
  •  Register via contextInitializerClasses context
     parameter in web.xml
Accessing Properties

–  By injecting the Environment
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
Configuring Profiles in XML
–  All bean definitions




–  Subset of bean definitions
Configuring Profiles in Java
           Config




                                               25


–  @Profile can also be used on components
  •  @Component, @Service, @Repository, etc.
Profile Activation Options

–  programmatically

–  system property

–  in web.xml

–  in tests via @ActiveProfiles
Activating Profiles…
 programmatically
Activating Profiles…
      via system properties

-Dspring.profiles.active=“dev”

-Dspring.profiles.default=“common”
Activating Profiles…
    in web apps
Activating Profiles…
 in integration tests
Java-based Configuration
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
Typical Infrastructure Setup

–  Transactions

–  Scheduling

–  MVC customization

–  AOP
@Enable* Annotations

–  Applied at the class-level on @Configuration
   classes

–  Roughly equivalent to their XML namespace
   counterparts
@Enable* in 3.1 RC1

–  @EnableTransactionManagement
–  @EnableAsync
–  @EnableScheduling
–  @EnableAspectJAutoProxy
–  @EnableLoadTimeWeaving
–  @EnableWebMvc
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
Java Configuration Example


                 Actually:
                 LocalSessionFactoryBuilder
New Testing Features in 3.1

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

–  Supersedes ContextLoader
–  Strategy for loading application contexts
–  From @Configuration classes or resource
   locations
–  Supports environment profiles
@ContextConfiguration

accepts a new `classes` attribute...
Ex: @Configuration Test #1
Ex: @Configuration Test #2
Caching
Caching Abstraction

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

–  Key annotations @Cacheable and
   @CacheEvict
Cache Key

–  All method arguments used by default




–  Use SpEL to select more specifically (use class,
   method, or argument name)
Conditional Caching
Cache Providers (1/2)

–  Cache and CacheManager SPI
  •  org.springframework.cache


–  Cache Implementations
  •  EhCacheCache
  •  ConcurrentMapCache and
     ConcurrentMapCacheFactoryBean
Cache Providers (2/2)

–  CacheManager Implementations
  •  EhCacheCacheManager
  •  ConcurrentMapCacheManager
  •  SimpleCacheManager
  •  NoOpCacheManager


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

–  Cache namespace
  •  <cache:annotation-driven />
  •  “cacheManager” bean
MVC and REST
@MVC 3.0 Config
–  Built-in defaults
   •  Based on DispatcherServlet.properties

–  Spring MVC namespace
   •  <mvc:annotation:driven>, <mvc:interceptors>, …
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
@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
A More Complete Example …
–  Add component scanning for @Controllers
   and other beans
Q: Where is the “Enabled”
      Configuration ?!
–  A: a framework-provided @Configuration class
   (actually DelegatingWebMvcConfiguration)
How Do I Customize All This?
–  Simply implement the WebMvcConfigurer
   interface
                               Allows selective overriding
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
Path Variables in the Model

–  @PathVariable arguments automatically
   added to the model




                             These can be deleted
URI Templates in Redirect
          Strings
–  URL templates supported in “redirect:”
   strings




                 Expanded from model attributes,
                which now include @PathVariables
URI Template Variables in
        Data Binding
–  URI template variables used in data binding
Matching MediaTypes < @MVC 3.1

  –  Using the 'headers' condition
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)
Servlet 3.0
Servlet 3.0 Containers

•  Tomcat 7 and GlassFish 3
  –  Explicitly supported

•  While preserving compatibility with Servlet
   2.4+
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
Native Servlet 3.0 in @MVC

•  Asynchronous request processing

•  Standard Servlet 3.0 file upload
  –  behind Spring's MultipartResolver abstraction
Odds & Ends
"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
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.
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
Further Resources

•  Spring Framework
  –  http://springframework.org
  –  Spring Reference Manual
  –  JavaDoc
•  Spring Forums
  –  http://forum.springframework.org
•  Spring JIRA
  –  http://jira.springframework.org
Blogs

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


•  Swiftmind Blog
  –  http://www.swiftmind.com/blog/
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

Weitere ähnliche Inhalte

Was ist angesagt?

Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
Tuna Tore
 
Core web application development
Core web application developmentCore web application development
Core web application development
Bahaa Farouk
 

Was ist angesagt? (19)

Java colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rsJava colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rs
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
 
JavaEE and RESTful development - WSO2 Colombo Meetup
JavaEE and RESTful development - WSO2 Colombo Meetup JavaEE and RESTful development - WSO2 Colombo Meetup
JavaEE and RESTful development - WSO2 Colombo Meetup
 
Java EE 8 Web Frameworks: A Look at JSF vs MVC
Java EE 8 Web Frameworks: A Look at JSF vs MVCJava EE 8 Web Frameworks: A Look at JSF vs MVC
Java EE 8 Web Frameworks: A Look at JSF vs MVC
 
WebLogic Server Work Managers and Overload Protection
WebLogic Server Work Managers and Overload ProtectionWebLogic Server Work Managers and Overload Protection
WebLogic Server Work Managers and Overload Protection
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
S313265 - Advanced Java API for RESTful Web Services at JavaOne Brazil 2010
S313265 - Advanced Java API for RESTful Web Services at JavaOne Brazil 2010S313265 - Advanced Java API for RESTful Web Services at JavaOne Brazil 2010
S313265 - Advanced Java API for RESTful Web Services at JavaOne Brazil 2010
 
Weblogic performance tuning2
Weblogic performance tuning2Weblogic performance tuning2
Weblogic performance tuning2
 
WebLogic Deployment Plan Example
WebLogic Deployment Plan ExampleWebLogic Deployment Plan Example
WebLogic Deployment Plan Example
 
Oracle Weblogic Server 11g: System Administration I
Oracle Weblogic Server 11g: System Administration IOracle Weblogic Server 11g: System Administration I
Oracle Weblogic Server 11g: System Administration I
 
weblogic training | oracle weblogic online training | weblogic server course
weblogic training | oracle weblogic online training | weblogic server courseweblogic training | oracle weblogic online training | weblogic server course
weblogic training | oracle weblogic online training | weblogic server course
 
jsf2 Notes
jsf2 Notesjsf2 Notes
jsf2 Notes
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session Management
 
Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)
 
Don't Wait! Develop Responsive Applications with Java EE7 Instead
Don't Wait! Develop Responsive Applications with Java EE7 InsteadDon't Wait! Develop Responsive Applications with Java EE7 Instead
Don't Wait! Develop Responsive Applications with Java EE7 Instead
 
Weblogic server cluster
Weblogic server clusterWeblogic server cluster
Weblogic server cluster
 
Introduction to weblogic
Introduction to weblogicIntroduction to weblogic
Introduction to weblogic
 
.NET Core, ASP.NET Core Course, Session 10
.NET Core, ASP.NET Core Course, Session 10.NET Core, ASP.NET Core Course, Session 10
.NET Core, ASP.NET Core Course, Session 10
 
Core web application development
Core web application developmentCore web application development
Core web application development
 

Andere mochten auch

LXF #102 - Linux Virtual Server
LXF #102 - Linux Virtual ServerLXF #102 - Linux Virtual Server
LXF #102 - Linux Virtual Server
guest69bec2
 
LXF #102 - Linux Virtual Server
LXF #102 - Linux Virtual Server LXF #102 - Linux Virtual Server
LXF #102 - Linux Virtual Server
guest69bec2
 

Andere mochten auch (6)

Spring Framework 4.1
Spring Framework 4.1Spring Framework 4.1
Spring Framework 4.1
 
SQLAlchemy Core: An Introduction
SQLAlchemy Core: An IntroductionSQLAlchemy Core: An Introduction
SQLAlchemy Core: An Introduction
 
Lvs mini-howto
Lvs mini-howtoLvs mini-howto
Lvs mini-howto
 
LXF #102 - Linux Virtual Server
LXF #102 - Linux Virtual ServerLXF #102 - Linux Virtual Server
LXF #102 - Linux Virtual Server
 
LXF #102 - Linux Virtual Server
LXF #102 - Linux Virtual Server LXF #102 - Linux Virtual Server
LXF #102 - Linux Virtual Server
 
OpenStack DVR_What is DVR?
OpenStack DVR_What is DVR?OpenStack DVR_What is DVR?
OpenStack DVR_What is DVR?
 

Ähnlich wie Spring 3.1 in a Nutshell - JAX London 2011

Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
Yiwei Ma
 

Ähnlich wie Spring 3.1 in a Nutshell - JAX London 2011 (20)

Spring 3.1 in a Nutshell
Spring 3.1 in a NutshellSpring 3.1 in a Nutshell
Spring 3.1 in a Nutshell
 
Spring 3.1: a Walking Tour
Spring 3.1: a Walking TourSpring 3.1: a Walking Tour
Spring 3.1: a Walking Tour
 
Testing Spring MVC and REST Web Applications
Testing Spring MVC and REST Web ApplicationsTesting Spring MVC and REST Web Applications
Testing Spring MVC and REST Web Applications
 
Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010
Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010
Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
 
Next stop: Spring 4
Next stop: Spring 4Next stop: Spring 4
Next stop: Spring 4
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
 
A first Draft to Java Configuration
A first Draft to Java ConfigurationA first Draft to Java Configuration
A first Draft to Java Configuration
 
Java EE 8 Update
Java EE 8 UpdateJava EE 8 Update
Java EE 8 Update
 
Servlets 3.0 - Asynchronous, Extensibility, Ease-of-use @ JavaOne Brazil 2010
Servlets 3.0 - Asynchronous, Extensibility, Ease-of-use @ JavaOne Brazil 2010Servlets 3.0 - Asynchronous, Extensibility, Ease-of-use @ JavaOne Brazil 2010
Servlets 3.0 - Asynchronous, Extensibility, Ease-of-use @ JavaOne Brazil 2010
 
Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ Silicon Val...
Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ Silicon Val...Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ Silicon Val...
Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ Silicon Val...
 
JavaOne India 2011 - Servlets 3.0
JavaOne India 2011 - Servlets 3.0JavaOne India 2011 - Servlets 3.0
JavaOne India 2011 - Servlets 3.0
 
4. introduction to Asp.Net MVC - Part II
4. introduction to Asp.Net MVC - Part II4. introduction to Asp.Net MVC - Part II
4. introduction to Asp.Net MVC - Part II
 
Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2
 
Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1
 
Java EE 6 & GlassFish = Less Code + More Power at CEJUG
Java EE 6 & GlassFish = Less Code + More Power at CEJUGJava EE 6 & GlassFish = Less Code + More Power at CEJUG
Java EE 6 & GlassFish = Less Code + More Power at CEJUG
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
 
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnitionJava EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
 
Java EE 6 = Less Code + More Power
Java EE 6 = Less Code + More PowerJava EE 6 = Less Code + More Power
Java EE 6 = Less Code + More Power
 
Maven
MavenMaven
Maven
 

Mehr von Sam Brannen

Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2
Sam Brannen
 

Mehr von Sam Brannen (20)

Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
 
Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022
 
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
 
JUnit 5: What's New and What's Coming - Spring I/O 2019
JUnit 5: What's New and What's Coming - Spring I/O 2019JUnit 5: What's New and What's Coming - Spring I/O 2019
JUnit 5: What's New and What's Coming - Spring I/O 2019
 
JUnit 5 - New Opportunities for Testing on the JVM
JUnit 5 - New Opportunities for Testing on the JVMJUnit 5 - New Opportunities for Testing on the JVM
JUnit 5 - New Opportunities for Testing on the JVM
 
Get the Most out of Testing with Spring 4.2
Get the Most out of Testing with Spring 4.2Get the Most out of Testing with Spring 4.2
Get the Most out of Testing with Spring 4.2
 
JUnit 5 - from Lambda to Alpha and beyond
JUnit 5 - from Lambda to Alpha and beyondJUnit 5 - from Lambda to Alpha and beyond
JUnit 5 - from Lambda to Alpha and beyond
 
Testing with Spring 4.x
Testing with Spring 4.xTesting with Spring 4.x
Testing with Spring 4.x
 
Composable Software Architecture with Spring
Composable Software Architecture with SpringComposable Software Architecture with Spring
Composable Software Architecture with Spring
 
Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2
 
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
 
Spring Framework 3.2 - What's New
Spring Framework 3.2 - What's NewSpring Framework 3.2 - What's New
Spring Framework 3.2 - What's New
 
Spring 3.1 and MVC Testing Support - 4Developers
Spring 3.1 and MVC Testing Support - 4DevelopersSpring 3.1 and MVC Testing Support - 4Developers
Spring 3.1 and MVC Testing Support - 4Developers
 
Effective out-of-container Integration Testing - 4Developers
Effective out-of-container Integration Testing - 4DevelopersEffective out-of-container Integration Testing - 4Developers
Effective out-of-container Integration Testing - 4Developers
 
Spring 3.1 to 3.2 in a Nutshell - SDC2012
Spring 3.1 to 3.2 in a Nutshell - SDC2012Spring 3.1 to 3.2 in a Nutshell - SDC2012
Spring 3.1 to 3.2 in a Nutshell - SDC2012
 
Spring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSpring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing Support
 
Spring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSpring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. REST
 
Effective out-of-container Integration Testing
Effective out-of-container Integration TestingEffective out-of-container Integration Testing
Effective out-of-container Integration Testing
 
What's New in Spring 3.0
What's New in Spring 3.0What's New in Spring 3.0
What's New in Spring 3.0
 
Modular Web Applications with OSGi
Modular Web Applications with OSGiModular Web Applications with OSGi
Modular Web Applications with OSGi
 

Kürzlich hochgeladen

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Kürzlich hochgeladen (20)

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

Spring 3.1 in a Nutshell - JAX London 2011

  • 1. Spring 3.1 in a Nutshell Sam Brannen / Swiftmind
  • 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
  • 4. Major Themes in Spring 3.0
  • 8. JSR-330 – DI for Java
  • 10. REST support in Spring MVC
  • 12. JSR-303 – bean validation
  • 13. Java EE 6 support: JPA 2.0, JSF 2.0
  • 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.
  • 17. Property Source Abstraction –  Property source –  Property resolution –  Placeholders
  • 18. PropertySource(s) –  PropertySource •  a single property source –  PropertySources •  a hierarchy of PropertySource objects •  potentially varying across deployment environments
  • 19. Property Resolution SPI –  org.springframework.core.env.PropertyResolver –  Environment extends PropertyResolver
  • 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
  • 22. Accessing Properties –  By injecting the Environment
  • 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. Configuring Profiles in XML –  All bean definitions –  Subset of bean definitions
  • 25. Configuring Profiles in Java Config 25 –  @Profile can also be used on components •  @Component, @Service, @Repository, etc.
  • 26. Profile Activation Options –  programmatically –  system property –  in web.xml –  in tests via @ActiveProfiles
  • 28. Activating Profiles… via system properties -Dspring.profiles.active=“dev” -Dspring.profiles.default=“common”
  • 29. Activating Profiles… in web apps
  • 30. Activating Profiles… in integration tests
  • 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. Typical Infrastructure Setup –  Transactions –  Scheduling –  MVC customization –  AOP
  • 34. @Enable* Annotations –  Applied at the class-level on @Configuration classes –  Roughly equivalent to their XML namespace counterparts
  • 35. @Enable* in 3.1 RC1 –  @EnableTransactionManagement –  @EnableAsync –  @EnableScheduling –  @EnableAspectJAutoProxy –  @EnableLoadTimeWeaving –  @EnableWebMvc
  • 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. Java Configuration Example Actually: LocalSessionFactoryBuilder
  • 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
  • 40. @ContextConfiguration accepts a new `classes` attribute...
  • 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.
  • 49. Cache Configuration –  Cache namespace •  <cache:annotation-driven /> •  “cacheManager” bean
  • 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
  • 60. URI Template Variables in Data Binding –  URI template variables used in data binding
  • 61. Matching MediaTypes < @MVC 3.1 –  Using the 'headers' condition
  • 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
  • 66. Native Servlet 3.0 in @MVC •  Asynchronous request processing •  Standard Servlet 3.0 file upload –  behind Spring's MultipartResolver 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