SlideShare a Scribd company logo
1 of 66
Download to read offline
Spring Framework 4.0
The Next Generation
Sam Brannen
@sam_brannen
Sam Brannen
•  Spring and Java Consultant @ Swiftmind
•  Java Developer for over 15 years
•  Spring Framework Core Committer since 2007
•  Spring Trainer
•  Presenter on Spring, Java, OSGi, and testing
|
Swiftmind: Areas of Expertise
•  Spring Framework
•  Java EE
•  OSGi
•  Agile Methodologies
•  Software Engineering Best Practices
|
Swiftmind: How to find us
•  Zurich, Switzerland
•  Twitter: @swiftmind
•  http://www.swiftmind.com

|
A Show of Hands…

|
Agenda
•  Spring 3.x in Review
•  Themes in 4.0
•  Java EE
•  Java SE
•  Spring 4 on Java 8
|
Spring 3.x: Component Model
•  Powerful annotated component model
•  stereotypes, configuration classes, composable
annotations, profiles

•  Spring Expression Language
•  and its use in @Value injection

|
Spring 3.x: Component Model
•  Comprehensive REST support
•  and other Spring @MVC additions

•  Support for async MVC processing
•  Spring MVC interacting with Servlet 3.0 async
callbacks

|
Spring 3.x: Component Model
•  Declarative validation and formatting
•  integration with JSR-303 Bean Validation

•  Declarative scheduling
•  trigger abstraction and cron support

•  Declarative caching
•  in-memory, Ehcache, etc.

|
Spring 3.x: Testing
•  Embedded databases via <jdbc /> namespace
•  @Configuration classes & @ActiveProfiles
•  @WebAppConfiguration
•  @ContextHierarchy
•  Spring MVC Test framework
|
Spring 3.x: Key Specifications
•  JSR-330 (Dependency Injection for Java)
•  @Inject, @Qualifier, Provider mechanism

•  JSR-303 (Bean Validation 1.0)
•  declarative constraints
•  embedded validation engine

|
Spring 3.x: Key Specifications
•  JPA 2.0
•  persistence provider integration
•  Spring transactions

•  Servlet 3.0
•  web.xml-free deployment
•  async request processing

|
Typical Annotated Component

|
Composable Stereotypes
•  Combining meta-annotations on a custom stereotype
•  Automatically detected: no configuration necessary!

|
Configuration Classes

|
Spring 4.0 Themes

|
New Baseline
•  Java SE 6+
•  Java EE 6+ (Servlet 3.0 focused, Servlet 2.5
compatible)
•  All deprecated packages removed
•  Many deprecated methods removed as well
|
Third-party Libraries
•  Minimum versions ~ mid 2010 now
•  For example
•  Hibernate 3.6+
•  Quartz 1.8+
•  Ehcache 2.1+

|
Java 8 Language & API Features
•  Lambda expressions
•  Method references
•  JSR-310 Date and Time
•  Repeatable annotations
•  Parameter name discovery
|
Groovy + Spring 4.0
•  A smooth out-of-the-box experience for
Groovy-based Spring applications

|
Groovy + Spring 4.0
•  AOP adaptations
•  special handling of GroovyObject calls
•  consider a Spring application with all components
written in the Groovy language instead of Java

|
Groovy + Spring 4.0
•  Groovy-based bean definitions
•  formerly known as the Bean Builder in Grails
•  now to live alongside Spring's configuration class
model

|
Conditional Bean Definitions
•  A generalized model for conditional bean
definitions
•  a more flexible and more dynamic variant of bean
definition profiles (as known from Spring 3.1)
•  can be used for smart defaulting
•  see Spring Boot J

|
Conditional Bean Definitions
•  @Conditional with programmatic Condition
implementations
•  can react to rich context (existing bean definitions,
etc.)
•  profile support now simply a ProfileCondition
implementation class

|
Annotation-based Components
•  Custom annotations may override specific
attributes of meta-annotations
•  Purely convention-based
•  use of same attribute name

|
Annotation-based Components
@MyTransactional(readOnly=true)	
	
@MySessionScope(scopedProxyMode=TARGET_CLASS)
	

|
Lazy Resolution Proxies
•  @Lazy on injection point
•  Alternative to Provider<MyTargetType>

|
Ordered Injection of Lists & Arrays
•  Ordered/@Order on candidate beans
•  Relative order within specific injection result

|
DI and Generics
•  Type matching based on full generic type
•  e.g. MyRepository<Customer>

•  Generic factory methods supported in XML
config files
•  Mockito, EasyMock, etc.

|
spring-messaging
•  New org.springframework.messaging module
•  Extracted from Spring Integration
•  Core message and channel abstractions

|
WebSockets
•  WebSocket endpoint model along the lines of
Spring MVC
•  JSR-356 but also covering SockJS and STOMP
•  Endpoints using generic messaging patterns

|
AsyncRestTemplate
•  Analogous to existing RestTemplate
•  Based on ListenableFuture return values

|
Spring and Java EE

|
Java EE Support (1/2)
•  Spring 2.5 completed Java EE 5 support
•  J2EE 1.3 – Java EE 5

•  Spring 3.0 introduced Java EE 6 support
•  J2EE 1.4 – Java EE 6

|
Java EE Support (2/2)
•  Spring 3.1/3.2: strong Servlet 3.0 focus
•  J2EE 1.4 (deprecated) – Java EE 6

•  Spring 4.0 introduces explicit Java EE 7 support
•  Java EE 5 (with JPA 2.0 feature pack) – Java EE 7

|
Enterprise APIs (1/2)
•  JMS 2.0
•  delivery delay, JMS 2.0 createSession() variants, etc.

•  JTA 1.2
•  javax.transaction.Transactional annotation

|
Enterprise APIs (2/2)
•  JPA 2.1
•  unsynchronized persistence contexts

•  Bean Validation 1.1
•  method parameter and return value constraints

|
Spring and Java SE

|
Java SE Support (1/2)
•  Spring 2.5 introduced Java 6 support
•  JDK 1.4 – JDK 6

•  Spring 3.0 raised the bar to Java 5+
•  JDK 5 – JDK 6

|
Java SE Support (2/2)
•  Spring 3.1/3.2: explicit Java 7 support
•  JDK 5 – JDK 7

•  Spring 4.0 introduces explicit Java 8 support
•  JDK 6 – JDK 8

|
Java 8 Programming Model

|
The State of Java 8
•  Delayed again...
•  Scheduled for GA in September 2013
•  Now just Developer Preview in September
•  OpenJDK 8 GA as late as March 2014 (!)

|
IDE Support for Java 8
•  IntelliJ: available since IDEA 12, released in
Dec 2012
•  Eclipse: announced for June 2014 (!)
•  Spring Tool Suite: Eclipse-based beta support
earlier
|
Java 1.8 Bytecode Level
•  Generated by -target 1.8 (compiler's default)
•  Not accepted by ASM 4.x (Spring's bytecode
parsing library)
•  Spring Framework 4.0 comes with patched ASM
4.1 variant
|
HashMap/HashSet Differences
•  Different hash algorithms in use
•  Leading to different hash iteration order
•  Code shouldn't rely on such an order but
sometimes does

|
Java 8 Lambda Conventions
•  Simple rule: interface with single method
• 
• 
• 
• 

typically callback interfaces
for example: Runnable, Callable
formerly “single abstract method” (SAM) types
now “functional interfaces”

|
Lambda + Spring = Natural Fit
•  Many Spring APIs are candidates for lambdas
•  by naturally following the lambda interface
conventions

|
Lambdas with JMS APIs
•  JmsTemplate + MessageCreator:
•  Message createMessage(Session session) throws
JMSException

|
Lambdas with Tx APIs
•  TransactionTemplate + TransactionCallback:
•  Object doInTransaction(TransactionStatus status)

|
Lambdas with JDBC APIs
•  JdbcTemplate + RowMapper:
•  Object mapRow(ResultSet rs, int rowNum) throws
SQLException

|
Lambdas with JdbcTemplate #1
JdbcTemplate jt = new JdbcTemplate(dataSource);	
	
jt.query("SELECT name, age FROM person WHERE dep = ?",	
ps -> { ps.setString(1, "Sales"); },	
(rs, rowNum) -> new Person(rs.getString(1), rs.getInt(2)));	
	

|
Lambdas with JdbcTemplate #2
JdbcTemplate jt = new JdbcTemplate(dataSource);	
	
jt.query("SELECT name, age FROM person WHERE dep = ?",	
ps -> {	
ps.setString(1, "Sales");	
},	
(rs, rowNum) -> {	
return new Person(rs.getString(1), rs.getInt(2));	
});	

|
Method References (1/2)
public List<Person> getPersonList(String department) {	
JdbcTemplate jt = new JdbcTemplate(this.dataSource);	
return jt.query(	
"SELECT name, age FROM person WHERE dep = ?",	
ps -> {	
ps.setString(1, "test");	
},	
this::mapPerson);	
}	

|
Method References (2/2)
private Person mapPerson(ResultSet rs, int rowNum)	
throws SQLException {	
return new Person(rs.getString(1), rs.getInt(2));	
}	
	

|
JSR-310 Date and Time
import java.time.*;	
import org.springframework.format.annotation.*;	
	
public class Customer {	
// @DateTimeFormat(iso=ISO.DATE)	
private LocalDate birthDate;	
	
@DateTimeFormat(pattern="M/d/yy h:mm")	
private LocalDateTime lastContact;	
	

|
Repeatable Annotations
@Scheduled(cron = "0 0 12 * * ?")	
@Scheduled(cron = "0 0 18 * * ?")	
public void performTempFileCleanup() { /* ... */ }	
	
@Schedules({	
@Scheduled(cron = "0 0 12 * * ?"),	
@Scheduled(cron = "0 0 18 * * ?")	
})	
public void performTempFileCleanup() { /* ... */ }	

|
Parameter Name Discovery (1/2)
•  Java 8 defines a Parameter reflection type for methods
•  application sources to be compiled with -parameters

|
Parameter Name Discovery (2/2)
•  Spring's StandardReflectionParameterNameDiscoverer
•  reading parameter names via Java 8's new Parameter type

•  Spring's DefaultParameterNameDiscoverer
•  now checking Java 8 first (-parameters)
•  ASM-based reading of debug symbols next (-debug)

|
In Closing…

|
Roadmap
•  Spring Framework 4.0 RC1: end of October
•  Spring Framework 4.0 RC2: mid November
•  Spring Framework 4.0 GA: end of 2013

|
Upgrade Considerations
•  Spring 3.2 does not support 1.8 bytecode level
•  upgrade to Spring 4.0 to enable Java 8 language features

•  Spring Framework 4.0 still compatible with JDK 6
and 7
•  Spring Framework 3.2 is in maintenance mode
|
Acknowledgements
Special thanks to Spring Framework project lead
Juergen Hoeller for permitting reuse of his content.

|
Spring Resources (1/2)
•  Spring Framework
•  http://projects.spring.io/spring-framework

•  Spring Forums
•  http://forum.spring.io

|
Spring Resources (2/2)
•  Spring JIRA
•  https://jira.springsource.org

•  Spring on GitHub
•  https://github.com/spring-projects/spring-framework

|
Blogs
•  Swiftmind Blog
•  http://www.swiftmind.com/blog

•  Spring Blog
•  http://spring.io/blog

|
Thanks for your attention!
@sam_brannen
sam.brannen@swiftmind.com
slideshare.net/sbrannen
www.
.com

More Related Content

What's hot

OpenNTF Domino API - Overview Introduction
OpenNTF Domino API - Overview IntroductionOpenNTF Domino API - Overview Introduction
OpenNTF Domino API - Overview IntroductionPaul Withers
 
Byte code manipulation and instrumentalization in Java
Byte code manipulation and instrumentalization in JavaByte code manipulation and instrumentalization in Java
Byte code manipulation and instrumentalization in JavaAlex Moskvin
 
Introduction to Micronaut at Oracle CodeOne 2018
Introduction to Micronaut at Oracle CodeOne 2018Introduction to Micronaut at Oracle CodeOne 2018
Introduction to Micronaut at Oracle CodeOne 2018graemerocher
 
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016takezoe
 
Infinum Android Talks #02 - How to write an annotation processor in Android
Infinum Android Talks #02 - How to write an annotation processor in AndroidInfinum Android Talks #02 - How to write an annotation processor in Android
Infinum Android Talks #02 - How to write an annotation processor in AndroidInfinum
 
Infinum Android Talks #02 - ActiveAndroid
Infinum Android Talks #02 - ActiveAndroidInfinum Android Talks #02 - ActiveAndroid
Infinum Android Talks #02 - ActiveAndroidInfinum
 
ASP.Net 5 and C# 6
ASP.Net 5 and C# 6ASP.Net 5 and C# 6
ASP.Net 5 and C# 6Andy Butland
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumNgoc Dao
 
DanNotes 2013: OpenNTF Domino API
DanNotes 2013: OpenNTF Domino APIDanNotes 2013: OpenNTF Domino API
DanNotes 2013: OpenNTF Domino APIPaul Withers
 
Reactive Micro Services with Java seminar
Reactive Micro Services with Java seminarReactive Micro Services with Java seminar
Reactive Micro Services with Java seminarGal Marder
 
Asynchronous programming in ASP.NET
Asynchronous programming in ASP.NETAsynchronous programming in ASP.NET
Asynchronous programming in ASP.NETAlex Thissen
 
I18nize Scala programs à la gettext
I18nize Scala programs à la gettextI18nize Scala programs à la gettext
I18nize Scala programs à la gettextNgoc Dao
 
.NET Core, ASP.NET Core Course, Session 2
.NET Core, ASP.NET Core Course, Session 2.NET Core, ASP.NET Core Course, Session 2
.NET Core, ASP.NET Core Course, Session 2aminmesbahi
 
Grails 4 and Micronaut at Devnexus 2019
Grails 4 and Micronaut at Devnexus 2019Grails 4 and Micronaut at Devnexus 2019
Grails 4 and Micronaut at Devnexus 2019graemerocher
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0Ido Flatow
 
.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3aminmesbahi
 
Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)なおき きしだ
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIOliver Busse
 
Exploring the Scala ecosystem
Exploring the Scala ecosystemExploring the Scala ecosystem
Exploring the Scala ecosystemDenis
 
Micronaut Deep Dive - Devoxx Belgium 2019
Micronaut Deep Dive - Devoxx Belgium 2019Micronaut Deep Dive - Devoxx Belgium 2019
Micronaut Deep Dive - Devoxx Belgium 2019graemerocher
 

What's hot (20)

OpenNTF Domino API - Overview Introduction
OpenNTF Domino API - Overview IntroductionOpenNTF Domino API - Overview Introduction
OpenNTF Domino API - Overview Introduction
 
Byte code manipulation and instrumentalization in Java
Byte code manipulation and instrumentalization in JavaByte code manipulation and instrumentalization in Java
Byte code manipulation and instrumentalization in Java
 
Introduction to Micronaut at Oracle CodeOne 2018
Introduction to Micronaut at Oracle CodeOne 2018Introduction to Micronaut at Oracle CodeOne 2018
Introduction to Micronaut at Oracle CodeOne 2018
 
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
 
Infinum Android Talks #02 - How to write an annotation processor in Android
Infinum Android Talks #02 - How to write an annotation processor in AndroidInfinum Android Talks #02 - How to write an annotation processor in Android
Infinum Android Talks #02 - How to write an annotation processor in Android
 
Infinum Android Talks #02 - ActiveAndroid
Infinum Android Talks #02 - ActiveAndroidInfinum Android Talks #02 - ActiveAndroid
Infinum Android Talks #02 - ActiveAndroid
 
ASP.Net 5 and C# 6
ASP.Net 5 and C# 6ASP.Net 5 and C# 6
ASP.Net 5 and C# 6
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and Xitrum
 
DanNotes 2013: OpenNTF Domino API
DanNotes 2013: OpenNTF Domino APIDanNotes 2013: OpenNTF Domino API
DanNotes 2013: OpenNTF Domino API
 
Reactive Micro Services with Java seminar
Reactive Micro Services with Java seminarReactive Micro Services with Java seminar
Reactive Micro Services with Java seminar
 
Asynchronous programming in ASP.NET
Asynchronous programming in ASP.NETAsynchronous programming in ASP.NET
Asynchronous programming in ASP.NET
 
I18nize Scala programs à la gettext
I18nize Scala programs à la gettextI18nize Scala programs à la gettext
I18nize Scala programs à la gettext
 
.NET Core, ASP.NET Core Course, Session 2
.NET Core, ASP.NET Core Course, Session 2.NET Core, ASP.NET Core Course, Session 2
.NET Core, ASP.NET Core Course, Session 2
 
Grails 4 and Micronaut at Devnexus 2019
Grails 4 and Micronaut at Devnexus 2019Grails 4 and Micronaut at Devnexus 2019
Grails 4 and Micronaut at Devnexus 2019
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0
 
.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3
 
Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
Exploring the Scala ecosystem
Exploring the Scala ecosystemExploring the Scala ecosystem
Exploring the Scala ecosystem
 
Micronaut Deep Dive - Devoxx Belgium 2019
Micronaut Deep Dive - Devoxx Belgium 2019Micronaut Deep Dive - Devoxx Belgium 2019
Micronaut Deep Dive - Devoxx Belgium 2019
 

Viewers also liked

iBusiness Praxiswebinar Vertikalisierung und Integration der Vertriebskanäle
iBusiness Praxiswebinar Vertikalisierung und Integration der VertriebskanäleiBusiness Praxiswebinar Vertikalisierung und Integration der Vertriebskanäle
iBusiness Praxiswebinar Vertikalisierung und Integration der VertriebskanäleUnic
 
Webtrends im Unic-Alltag – eine Entdeckungsreise
Webtrends im Unic-Alltag – eine EntdeckungsreiseWebtrends im Unic-Alltag – eine Entdeckungsreise
Webtrends im Unic-Alltag – eine EntdeckungsreiseUnic
 
E-Mail-Marketing: innovativ und gewinnbringend
E-Mail-Marketing: innovativ und gewinnbringendE-Mail-Marketing: innovativ und gewinnbringend
E-Mail-Marketing: innovativ und gewinnbringendUnic
 
Next Generation Software Development: Using .NET 4.0 and Visual Studio 2010
Next Generation Software Development: Using .NET 4.0 and Visual Studio 2010Next Generation Software Development: Using .NET 4.0 and Visual Studio 2010
Next Generation Software Development: Using .NET 4.0 and Visual Studio 2010joycsc
 
Digitale Kundennähe bei der Mobiliar
Digitale Kundennähe bei der MobiliarDigitale Kundennähe bei der Mobiliar
Digitale Kundennähe bei der MobiliarUnic
 
Who is the next generation of volunteers version 4.0 January 2013
Who is the next generation of volunteers version 4.0 January 2013Who is the next generation of volunteers version 4.0 January 2013
Who is the next generation of volunteers version 4.0 January 2013Boomer Match to Business
 
Tag Management System bei der Post
Tag Management System bei der PostTag Management System bei der Post
Tag Management System bei der PostUnic
 
EFQM Webinar - KNOWING 2.0 - Does Enterprise 2.0 Reveal The Next Generation O...
EFQM Webinar - KNOWING 2.0 - Does Enterprise 2.0 Reveal The Next Generation O...EFQM Webinar - KNOWING 2.0 - Does Enterprise 2.0 Reveal The Next Generation O...
EFQM Webinar - KNOWING 2.0 - Does Enterprise 2.0 Reveal The Next Generation O...Dada_Lin
 
Digitale Kundennähe bei der BEKB
Digitale Kundennähe bei der BEKBDigitale Kundennähe bei der BEKB
Digitale Kundennähe bei der BEKBUnic
 

Viewers also liked (10)

Mobilizing Generation 2.0
Mobilizing Generation 2.0Mobilizing Generation 2.0
Mobilizing Generation 2.0
 
iBusiness Praxiswebinar Vertikalisierung und Integration der Vertriebskanäle
iBusiness Praxiswebinar Vertikalisierung und Integration der VertriebskanäleiBusiness Praxiswebinar Vertikalisierung und Integration der Vertriebskanäle
iBusiness Praxiswebinar Vertikalisierung und Integration der Vertriebskanäle
 
Webtrends im Unic-Alltag – eine Entdeckungsreise
Webtrends im Unic-Alltag – eine EntdeckungsreiseWebtrends im Unic-Alltag – eine Entdeckungsreise
Webtrends im Unic-Alltag – eine Entdeckungsreise
 
E-Mail-Marketing: innovativ und gewinnbringend
E-Mail-Marketing: innovativ und gewinnbringendE-Mail-Marketing: innovativ und gewinnbringend
E-Mail-Marketing: innovativ und gewinnbringend
 
Next Generation Software Development: Using .NET 4.0 and Visual Studio 2010
Next Generation Software Development: Using .NET 4.0 and Visual Studio 2010Next Generation Software Development: Using .NET 4.0 and Visual Studio 2010
Next Generation Software Development: Using .NET 4.0 and Visual Studio 2010
 
Digitale Kundennähe bei der Mobiliar
Digitale Kundennähe bei der MobiliarDigitale Kundennähe bei der Mobiliar
Digitale Kundennähe bei der Mobiliar
 
Who is the next generation of volunteers version 4.0 January 2013
Who is the next generation of volunteers version 4.0 January 2013Who is the next generation of volunteers version 4.0 January 2013
Who is the next generation of volunteers version 4.0 January 2013
 
Tag Management System bei der Post
Tag Management System bei der PostTag Management System bei der Post
Tag Management System bei der Post
 
EFQM Webinar - KNOWING 2.0 - Does Enterprise 2.0 Reveal The Next Generation O...
EFQM Webinar - KNOWING 2.0 - Does Enterprise 2.0 Reveal The Next Generation O...EFQM Webinar - KNOWING 2.0 - Does Enterprise 2.0 Reveal The Next Generation O...
EFQM Webinar - KNOWING 2.0 - Does Enterprise 2.0 Reveal The Next Generation O...
 
Digitale Kundennähe bei der BEKB
Digitale Kundennähe bei der BEKBDigitale Kundennähe bei der BEKB
Digitale Kundennähe bei der BEKB
 

Similar to JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation

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 2013Sam Brannen
 
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.1Sam Brannen
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerZeroTurnaround
 
Spring 4-groovy
Spring 4-groovySpring 4-groovy
Spring 4-groovyGR8Conf
 
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012Sam Brannen
 
Spring Framework 4.1
Spring Framework 4.1Spring Framework 4.1
Spring Framework 4.1Sam Brannen
 
Spring 3.1 in a Nutshell - JAX London 2011
Spring 3.1 in a Nutshell - JAX London 2011Spring 3.1 in a Nutshell - JAX London 2011
Spring 3.1 in a Nutshell - JAX London 2011Sam Brannen
 
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring 3.1 in a Nutshell | Sam BrannenSpring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring 3.1 in a Nutshell | Sam BrannenJAX London
 
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 ApplicationsSam Brannen
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor FrameworkDamien Magoni
 
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 NewSam Brannen
 
Introduction to Node (15th May 2017)
Introduction to Node (15th May 2017)Introduction to Node (15th May 2017)
Introduction to Node (15th May 2017)Lucas Jellema
 
Composable Software Architecture with Spring
Composable Software Architecture with SpringComposable Software Architecture with Spring
Composable Software Architecture with SpringSam Brannen
 
Spring MVC framework
Spring MVC frameworkSpring MVC framework
Spring MVC frameworkMohit Gupta
 
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)Robert Scholte
 
Java10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 SprJava10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 Sprなおき きしだ
 
Setting up a free open source java e-commerce website
Setting up a free open source java e-commerce websiteSetting up a free open source java e-commerce website
Setting up a free open source java e-commerce websiteCsaba Toth
 

Similar to JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation (20)

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 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
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
 
Spring 4-groovy
Spring 4-groovySpring 4-groovy
Spring 4-groovy
 
Get ready for spring 4
Get ready for spring 4Get ready for spring 4
Get ready for spring 4
 
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
 
Spring Framework 4.1
Spring Framework 4.1Spring Framework 4.1
Spring Framework 4.1
 
Spring 3.1 in a Nutshell - JAX London 2011
Spring 3.1 in a Nutshell - JAX London 2011Spring 3.1 in a Nutshell - JAX London 2011
Spring 3.1 in a Nutshell - JAX London 2011
 
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring 3.1 in a Nutshell | Sam BrannenSpring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
 
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
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor Framework
 
Java 8
Java 8Java 8
Java 8
 
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
 
Angular2
Angular2Angular2
Angular2
 
Introduction to Node (15th May 2017)
Introduction to Node (15th May 2017)Introduction to Node (15th May 2017)
Introduction to Node (15th May 2017)
 
Composable Software Architecture with Spring
Composable Software Architecture with SpringComposable Software Architecture with Spring
Composable Software Architecture with Spring
 
Spring MVC framework
Spring MVC frameworkSpring MVC framework
Spring MVC framework
 
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)
 
Java10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 SprJava10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 Spr
 
Setting up a free open source java e-commerce website
Setting up a free open source java e-commerce websiteSetting up a free open source java e-commerce website
Setting up a free open source java e-commerce website
 

More from jazoon13

JAZOON'13 - Joe Justice - Test First Saves The World
JAZOON'13 - Joe Justice - Test First Saves The WorldJAZOON'13 - Joe Justice - Test First Saves The World
JAZOON'13 - Joe Justice - Test First Saves The Worldjazoon13
 
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User StoriesJAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Storiesjazoon13
 
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung FuJAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fujazoon13
 
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -EssentialsJAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentialsjazoon13
 
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScript
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScriptJAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScript
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScriptjazoon13
 
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone beforeJAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone beforejazoon13
 
JAZOON'13 - Andres Almiray - Rocket Propelled Java
JAZOON'13 - Andres Almiray - Rocket Propelled JavaJAZOON'13 - Andres Almiray - Rocket Propelled Java
JAZOON'13 - Andres Almiray - Rocket Propelled Javajazoon13
 
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software DevelopmentJAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Developmentjazoon13
 
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...jazoon13
 
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed TeamsJAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teamsjazoon13
 
JAZOON'13 - Kai Waehner - Hadoop Integration
JAZOON'13 - Kai Waehner - Hadoop IntegrationJAZOON'13 - Kai Waehner - Hadoop Integration
JAZOON'13 - Kai Waehner - Hadoop Integrationjazoon13
 
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtime
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In RealtimeJAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtime
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtimejazoon13
 
JAZOON'13 - Andrej Vckovski - Go synchronized
JAZOON'13 - Andrej Vckovski - Go synchronizedJAZOON'13 - Andrej Vckovski - Go synchronized
JAZOON'13 - Andrej Vckovski - Go synchronizedjazoon13
 
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experienceJAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experiencejazoon13
 
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !jazoon13
 
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling SoftwareJAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Softwarejazoon13
 
JAZOON'13 - Stefan Saasen - True Git: The Great Migration
JAZOON'13 - Stefan Saasen - True Git: The Great MigrationJAZOON'13 - Stefan Saasen - True Git: The Great Migration
JAZOON'13 - Stefan Saasen - True Git: The Great Migrationjazoon13
 
JAZOON'13 - Stefan Saasen - Real World Git Workflows
JAZOON'13 - Stefan Saasen - Real World Git WorkflowsJAZOON'13 - Stefan Saasen - Real World Git Workflows
JAZOON'13 - Stefan Saasen - Real World Git Workflowsjazoon13
 

More from jazoon13 (18)

JAZOON'13 - Joe Justice - Test First Saves The World
JAZOON'13 - Joe Justice - Test First Saves The WorldJAZOON'13 - Joe Justice - Test First Saves The World
JAZOON'13 - Joe Justice - Test First Saves The World
 
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User StoriesJAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
 
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung FuJAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
 
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -EssentialsJAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
 
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScript
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScriptJAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScript
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScript
 
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone beforeJAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
 
JAZOON'13 - Andres Almiray - Rocket Propelled Java
JAZOON'13 - Andres Almiray - Rocket Propelled JavaJAZOON'13 - Andres Almiray - Rocket Propelled Java
JAZOON'13 - Andres Almiray - Rocket Propelled Java
 
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software DevelopmentJAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
 
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
 
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed TeamsJAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
 
JAZOON'13 - Kai Waehner - Hadoop Integration
JAZOON'13 - Kai Waehner - Hadoop IntegrationJAZOON'13 - Kai Waehner - Hadoop Integration
JAZOON'13 - Kai Waehner - Hadoop Integration
 
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtime
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In RealtimeJAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtime
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtime
 
JAZOON'13 - Andrej Vckovski - Go synchronized
JAZOON'13 - Andrej Vckovski - Go synchronizedJAZOON'13 - Andrej Vckovski - Go synchronized
JAZOON'13 - Andrej Vckovski - Go synchronized
 
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experienceJAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
 
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
 
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling SoftwareJAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
 
JAZOON'13 - Stefan Saasen - True Git: The Great Migration
JAZOON'13 - Stefan Saasen - True Git: The Great MigrationJAZOON'13 - Stefan Saasen - True Git: The Great Migration
JAZOON'13 - Stefan Saasen - True Git: The Great Migration
 
JAZOON'13 - Stefan Saasen - Real World Git Workflows
JAZOON'13 - Stefan Saasen - Real World Git WorkflowsJAZOON'13 - Stefan Saasen - Real World Git Workflows
JAZOON'13 - Stefan Saasen - Real World Git Workflows
 

Recently uploaded

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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...apidays
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
[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.pdfhans926745
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
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.pptxHampshireHUG
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
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 DevelopmentsTrustArc
 
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...Drew Madelung
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
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 textsMaria Levchenko
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 

Recently uploaded (20)

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
[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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
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
 
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...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 

JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation

  • 1. Spring Framework 4.0 The Next Generation Sam Brannen @sam_brannen
  • 2. Sam Brannen •  Spring and Java Consultant @ Swiftmind •  Java Developer for over 15 years •  Spring Framework Core Committer since 2007 •  Spring Trainer •  Presenter on Spring, Java, OSGi, and testing |
  • 3. Swiftmind: Areas of Expertise •  Spring Framework •  Java EE •  OSGi •  Agile Methodologies •  Software Engineering Best Practices |
  • 4. Swiftmind: How to find us •  Zurich, Switzerland •  Twitter: @swiftmind •  http://www.swiftmind.com |
  • 5. A Show of Hands… |
  • 6. Agenda •  Spring 3.x in Review •  Themes in 4.0 •  Java EE •  Java SE •  Spring 4 on Java 8 |
  • 7. Spring 3.x: Component Model •  Powerful annotated component model •  stereotypes, configuration classes, composable annotations, profiles •  Spring Expression Language •  and its use in @Value injection |
  • 8. Spring 3.x: Component Model •  Comprehensive REST support •  and other Spring @MVC additions •  Support for async MVC processing •  Spring MVC interacting with Servlet 3.0 async callbacks |
  • 9. Spring 3.x: Component Model •  Declarative validation and formatting •  integration with JSR-303 Bean Validation •  Declarative scheduling •  trigger abstraction and cron support •  Declarative caching •  in-memory, Ehcache, etc. |
  • 10. Spring 3.x: Testing •  Embedded databases via <jdbc /> namespace •  @Configuration classes & @ActiveProfiles •  @WebAppConfiguration •  @ContextHierarchy •  Spring MVC Test framework |
  • 11. Spring 3.x: Key Specifications •  JSR-330 (Dependency Injection for Java) •  @Inject, @Qualifier, Provider mechanism •  JSR-303 (Bean Validation 1.0) •  declarative constraints •  embedded validation engine |
  • 12. Spring 3.x: Key Specifications •  JPA 2.0 •  persistence provider integration •  Spring transactions •  Servlet 3.0 •  web.xml-free deployment •  async request processing |
  • 14. Composable Stereotypes •  Combining meta-annotations on a custom stereotype •  Automatically detected: no configuration necessary! |
  • 17. New Baseline •  Java SE 6+ •  Java EE 6+ (Servlet 3.0 focused, Servlet 2.5 compatible) •  All deprecated packages removed •  Many deprecated methods removed as well |
  • 18. Third-party Libraries •  Minimum versions ~ mid 2010 now •  For example •  Hibernate 3.6+ •  Quartz 1.8+ •  Ehcache 2.1+ |
  • 19. Java 8 Language & API Features •  Lambda expressions •  Method references •  JSR-310 Date and Time •  Repeatable annotations •  Parameter name discovery |
  • 20. Groovy + Spring 4.0 •  A smooth out-of-the-box experience for Groovy-based Spring applications |
  • 21. Groovy + Spring 4.0 •  AOP adaptations •  special handling of GroovyObject calls •  consider a Spring application with all components written in the Groovy language instead of Java |
  • 22. Groovy + Spring 4.0 •  Groovy-based bean definitions •  formerly known as the Bean Builder in Grails •  now to live alongside Spring's configuration class model |
  • 23. Conditional Bean Definitions •  A generalized model for conditional bean definitions •  a more flexible and more dynamic variant of bean definition profiles (as known from Spring 3.1) •  can be used for smart defaulting •  see Spring Boot J |
  • 24. Conditional Bean Definitions •  @Conditional with programmatic Condition implementations •  can react to rich context (existing bean definitions, etc.) •  profile support now simply a ProfileCondition implementation class |
  • 25. Annotation-based Components •  Custom annotations may override specific attributes of meta-annotations •  Purely convention-based •  use of same attribute name |
  • 27. Lazy Resolution Proxies •  @Lazy on injection point •  Alternative to Provider<MyTargetType> |
  • 28. Ordered Injection of Lists & Arrays •  Ordered/@Order on candidate beans •  Relative order within specific injection result |
  • 29. DI and Generics •  Type matching based on full generic type •  e.g. MyRepository<Customer> •  Generic factory methods supported in XML config files •  Mockito, EasyMock, etc. |
  • 30. spring-messaging •  New org.springframework.messaging module •  Extracted from Spring Integration •  Core message and channel abstractions |
  • 31. WebSockets •  WebSocket endpoint model along the lines of Spring MVC •  JSR-356 but also covering SockJS and STOMP •  Endpoints using generic messaging patterns |
  • 32. AsyncRestTemplate •  Analogous to existing RestTemplate •  Based on ListenableFuture return values |
  • 34. Java EE Support (1/2) •  Spring 2.5 completed Java EE 5 support •  J2EE 1.3 – Java EE 5 •  Spring 3.0 introduced Java EE 6 support •  J2EE 1.4 – Java EE 6 |
  • 35. Java EE Support (2/2) •  Spring 3.1/3.2: strong Servlet 3.0 focus •  J2EE 1.4 (deprecated) – Java EE 6 •  Spring 4.0 introduces explicit Java EE 7 support •  Java EE 5 (with JPA 2.0 feature pack) – Java EE 7 |
  • 36. Enterprise APIs (1/2) •  JMS 2.0 •  delivery delay, JMS 2.0 createSession() variants, etc. •  JTA 1.2 •  javax.transaction.Transactional annotation |
  • 37. Enterprise APIs (2/2) •  JPA 2.1 •  unsynchronized persistence contexts •  Bean Validation 1.1 •  method parameter and return value constraints |
  • 39. Java SE Support (1/2) •  Spring 2.5 introduced Java 6 support •  JDK 1.4 – JDK 6 •  Spring 3.0 raised the bar to Java 5+ •  JDK 5 – JDK 6 |
  • 40. Java SE Support (2/2) •  Spring 3.1/3.2: explicit Java 7 support •  JDK 5 – JDK 7 •  Spring 4.0 introduces explicit Java 8 support •  JDK 6 – JDK 8 |
  • 42. The State of Java 8 •  Delayed again... •  Scheduled for GA in September 2013 •  Now just Developer Preview in September •  OpenJDK 8 GA as late as March 2014 (!) |
  • 43. IDE Support for Java 8 •  IntelliJ: available since IDEA 12, released in Dec 2012 •  Eclipse: announced for June 2014 (!) •  Spring Tool Suite: Eclipse-based beta support earlier |
  • 44. Java 1.8 Bytecode Level •  Generated by -target 1.8 (compiler's default) •  Not accepted by ASM 4.x (Spring's bytecode parsing library) •  Spring Framework 4.0 comes with patched ASM 4.1 variant |
  • 45. HashMap/HashSet Differences •  Different hash algorithms in use •  Leading to different hash iteration order •  Code shouldn't rely on such an order but sometimes does |
  • 46. Java 8 Lambda Conventions •  Simple rule: interface with single method •  •  •  •  typically callback interfaces for example: Runnable, Callable formerly “single abstract method” (SAM) types now “functional interfaces” |
  • 47. Lambda + Spring = Natural Fit •  Many Spring APIs are candidates for lambdas •  by naturally following the lambda interface conventions |
  • 48. Lambdas with JMS APIs •  JmsTemplate + MessageCreator: •  Message createMessage(Session session) throws JMSException |
  • 49. Lambdas with Tx APIs •  TransactionTemplate + TransactionCallback: •  Object doInTransaction(TransactionStatus status) |
  • 50. Lambdas with JDBC APIs •  JdbcTemplate + RowMapper: •  Object mapRow(ResultSet rs, int rowNum) throws SQLException |
  • 51. Lambdas with JdbcTemplate #1 JdbcTemplate jt = new JdbcTemplate(dataSource); jt.query("SELECT name, age FROM person WHERE dep = ?", ps -> { ps.setString(1, "Sales"); }, (rs, rowNum) -> new Person(rs.getString(1), rs.getInt(2))); |
  • 52. Lambdas with JdbcTemplate #2 JdbcTemplate jt = new JdbcTemplate(dataSource); jt.query("SELECT name, age FROM person WHERE dep = ?", ps -> { ps.setString(1, "Sales"); }, (rs, rowNum) -> { return new Person(rs.getString(1), rs.getInt(2)); }); |
  • 53. Method References (1/2) public List<Person> getPersonList(String department) { JdbcTemplate jt = new JdbcTemplate(this.dataSource); return jt.query( "SELECT name, age FROM person WHERE dep = ?", ps -> { ps.setString(1, "test"); }, this::mapPerson); } |
  • 54. Method References (2/2) private Person mapPerson(ResultSet rs, int rowNum) throws SQLException { return new Person(rs.getString(1), rs.getInt(2)); } |
  • 55. JSR-310 Date and Time import java.time.*; import org.springframework.format.annotation.*; public class Customer { // @DateTimeFormat(iso=ISO.DATE) private LocalDate birthDate; @DateTimeFormat(pattern="M/d/yy h:mm") private LocalDateTime lastContact; |
  • 56. Repeatable Annotations @Scheduled(cron = "0 0 12 * * ?") @Scheduled(cron = "0 0 18 * * ?") public void performTempFileCleanup() { /* ... */ } @Schedules({ @Scheduled(cron = "0 0 12 * * ?"), @Scheduled(cron = "0 0 18 * * ?") }) public void performTempFileCleanup() { /* ... */ } |
  • 57. Parameter Name Discovery (1/2) •  Java 8 defines a Parameter reflection type for methods •  application sources to be compiled with -parameters |
  • 58. Parameter Name Discovery (2/2) •  Spring's StandardReflectionParameterNameDiscoverer •  reading parameter names via Java 8's new Parameter type •  Spring's DefaultParameterNameDiscoverer •  now checking Java 8 first (-parameters) •  ASM-based reading of debug symbols next (-debug) |
  • 60. Roadmap •  Spring Framework 4.0 RC1: end of October •  Spring Framework 4.0 RC2: mid November •  Spring Framework 4.0 GA: end of 2013 |
  • 61. Upgrade Considerations •  Spring 3.2 does not support 1.8 bytecode level •  upgrade to Spring 4.0 to enable Java 8 language features •  Spring Framework 4.0 still compatible with JDK 6 and 7 •  Spring Framework 3.2 is in maintenance mode |
  • 62. Acknowledgements Special thanks to Spring Framework project lead Juergen Hoeller for permitting reuse of his content. |
  • 63. Spring Resources (1/2) •  Spring Framework •  http://projects.spring.io/spring-framework •  Spring Forums •  http://forum.spring.io |
  • 64. Spring Resources (2/2) •  Spring JIRA •  https://jira.springsource.org •  Spring on GitHub •  https://github.com/spring-projects/spring-framework |
  • 65. Blogs •  Swiftmind Blog •  http://www.swiftmind.com/blog •  Spring Blog •  http://spring.io/blog |
  • 66. Thanks for your attention! @sam_brannen sam.brannen@swiftmind.com slideshare.net/sbrannen www. .com