SlideShare une entreprise Scribd logo
1  sur  66
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

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
 

Tendances (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
 

En vedette

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
 

En vedette (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
 

Similaire à 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
 

Similaire à 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
 

Plus de 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
 

Plus de 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
 

Dernier

How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Visualising and forecasting stocks using Dash
Visualising and forecasting stocks using DashVisualising and forecasting stocks using Dash
Visualising and forecasting stocks using Dashnarutouzumaki53779
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 

Dernier (20)

How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Visualising and forecasting stocks using Dash
Visualising and forecasting stocks using DashVisualising and forecasting stocks using Dash
Visualising and forecasting stocks using Dash
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 

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