SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

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
 

Mais procurados (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
 
.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
 
Introduction to weblogic
Introduction to weblogicIntroduction to weblogic
Introduction to weblogic
 
Core web application development
Core web application developmentCore web application development
Core web application development
 

Destaque

Ad group policy1
Ad group policy1Ad group policy1
Ad group policy1
denogx
 
кудрявцев презентация цпе наборная компания 2011 2012
кудрявцев презентация цпе наборная компания 2011 2012кудрявцев презентация цпе наборная компания 2011 2012
кудрявцев презентация цпе наборная компания 2011 2012
Андрей Криминенко
 
Hum2220 0915 syllabus
Hum2220 0915 syllabusHum2220 0915 syllabus
Hum2220 0915 syllabus
ProfWillAdams
 
Keynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James GovernorKeynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James Governor
JAX London
 
Hum2220 sm2015 proust questionnaire
Hum2220 sm2015 proust questionnaireHum2220 sm2015 proust questionnaire
Hum2220 sm2015 proust questionnaire
ProfWillAdams
 

Destaque (20)

Ad group policy1
Ad group policy1Ad group policy1
Ad group policy1
 
KTI Perkembangan Smartphone di Jember
KTI   Perkembangan Smartphone di JemberKTI   Perkembangan Smartphone di Jember
KTI Perkembangan Smartphone di Jember
 
New culture of_light
New culture of_lightNew culture of_light
New culture of_light
 
Pf sense 2.0
Pf sense 2.0Pf sense 2.0
Pf sense 2.0
 
DROGUERIA LIZBETH2
DROGUERIA LIZBETH2DROGUERIA LIZBETH2
DROGUERIA LIZBETH2
 
кудрявцев презентация цпе наборная компания 2011 2012
кудрявцев презентация цпе наборная компания 2011 2012кудрявцев презентация цпе наборная компания 2011 2012
кудрявцев презентация цпе наборная компания 2011 2012
 
Електронни пари: Пътят до BitCoin и поглед напред
Електронни пари: Пътят до BitCoin и поглед напредЕлектронни пари: Пътят до BitCoin и поглед напред
Електронни пари: Пътят до BitCoin и поглед напред
 
Republic of france
Republic of franceRepublic of france
Republic of france
 
Intro to OpenStack - Scott Sanchez and Niki Acosta
Intro to OpenStack - Scott Sanchez and Niki AcostaIntro to OpenStack - Scott Sanchez and Niki Acosta
Intro to OpenStack - Scott Sanchez and Niki Acosta
 
I benefici dell'utilizzo dell'Olea europaea (Olivo) in medicina
I benefici dell'utilizzo dell'Olea europaea (Olivo) in medicinaI benefici dell'utilizzo dell'Olea europaea (Olivo) in medicina
I benefici dell'utilizzo dell'Olea europaea (Olivo) in medicina
 
Redis the better NoSQL
Redis the better NoSQLRedis the better NoSQL
Redis the better NoSQL
 
Hum2220 0915 syllabus
Hum2220 0915 syllabusHum2220 0915 syllabus
Hum2220 0915 syllabus
 
2011 Pmo Symposium Enhancing The Pmo Partership Final
2011 Pmo Symposium Enhancing The Pmo Partership Final2011 Pmo Symposium Enhancing The Pmo Partership Final
2011 Pmo Symposium Enhancing The Pmo Partership Final
 
Keynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James GovernorKeynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James Governor
 
Mobile User Experience: Auto Drive through Performance Metrics
Mobile User Experience:Auto Drive through Performance MetricsMobile User Experience:Auto Drive through Performance Metrics
Mobile User Experience: Auto Drive through Performance Metrics
 
Hum2220 sm2015 proust questionnaire
Hum2220 sm2015 proust questionnaireHum2220 sm2015 proust questionnaire
Hum2220 sm2015 proust questionnaire
 
Aiducation catalogue feb 28 version
Aiducation catalogue feb 28 versionAiducation catalogue feb 28 version
Aiducation catalogue feb 28 version
 
Art4705 historyof photography
Art4705 historyof photographyArt4705 historyof photography
Art4705 historyof photography
 
祝福世界好友周快樂!
祝福世界好友周快樂!祝福世界好友周快樂!
祝福世界好友周快樂!
 
How to suck at presenting (and how to avoid it)
How to suck at presenting (and how to avoid it)How to suck at presenting (and how to avoid it)
How to suck at presenting (and how to avoid it)
 

Semelhante a Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

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

Semelhante a Spring Day | Spring 3.1 in a Nutshell | Sam Brannen (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 Framework 4.1
Spring Framework 4.1Spring Framework 4.1
Spring Framework 4.1
 
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
 

Mais de JAX London

Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver GierkeSpring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
JAX London
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJava Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily Jiang
JAX London
 
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
JAX London
 
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
JAX London
 

Mais de JAX London (20)

Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
 
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
 
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark LittleKeynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
 
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
 
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave SyerSpring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
 
Spring Day | Identity Management with Spring Security | Dave Syer
Spring Day | Identity Management with Spring Security | Dave SyerSpring Day | Identity Management with Spring Security | Dave Syer
Spring Day | Identity Management with Spring Security | Dave Syer
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
 
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver GierkeSpring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJava Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily Jiang
 
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
 
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
 
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
Java Tech & Tools | Social Media in Programming in Java | Khanderao KandJava Tech & Tools | Social Media in Programming in Java | Khanderao Kand
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
 
Java Tech & Tools | Just Keep Passing the Message | Russel Winder
Java Tech & Tools | Just Keep Passing the Message | Russel WinderJava Tech & Tools | Just Keep Passing the Message | Russel Winder
Java Tech & Tools | Just Keep Passing the Message | Russel Winder
 
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
Java Tech & Tools | Grails in the Java Enterprise | Peter LedbrookJava Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
 
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
 
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
Java EE | Modular EJBs for Enterprise OSGi | Tim WardJava EE | Modular EJBs for Enterprise OSGi | Tim Ward
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
 
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan GallimoreJava EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
 
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
 
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil BartlettJava Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
 
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon RitterJava Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
 

Último

Último (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 

Spring Day | Spring 3.1 in a Nutshell | Sam Brannen

  • 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