Spring Framework 3

antlertextureSoftware and s/w Development

Jul 14, 2012 (5 years and 2 months ago)

531 views

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring Framework 3.0
The Next Generation
Jürgen Höller
VP & Distinguished Engineer
SpringSource
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

2
Agenda


Quick Review: Spring 2.5


Spring 3.0 Themes and Features


Spring 3.0 Roadmap
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

3
Spring Framework 2.5


Comprehensive support for
annotation-based configuration


@Autowired


with optional @Qualifier or custom qualifier


@Transactional


@Service, @Repository, @Controller


Common
Java EE 5
annotations supported too


@PostConstruct, @PreDestroy


@PersistenceContext, @PersistenceUnit


@Resource, @EJB, @WebServiceRef


@TransactionAttribute
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

4
Annotated Bean Component
@Service

public

class
RewardNetworkService
implements
RewardNetwork {
@Autowired

public
RewardNetworkService(AccountRepository
ar) {

}

@Transactional
public
RewardConfirmation
rewardAccountFor(Dining d) {

}
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

5
Minimal XML Bean Definitions
<!– Activating annotation-based configuration -->

<context:annotation-config/>
<
bean
class
=

com.myapp.rewards.RewardNetworkImpl

/>
<
bean
class
=

com.myapp.rewards.JdbcAccountRepository

/>
<!– Plus shared infrastructure configuration
beans:
PlatformTransactionManager, DataSource, etc
-->
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

6
Test Context Framework
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public

class
RewardSystemIntegrationTests {
@Autowired

private
RewardNetwork
rewardNetwork
;
@Test

@Transactional

public

void
testRewardAccountForDining() {
// test in transaction with auto-rollback

}
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

7
@MVC Controller Style
@Controller
public class
MyController {

private

final

MyService

myService
;

@Autowired

public

MyController(MyService

myService) {

this.
myService
=
myService
;

}

@RequestMapping("/removeBook")

public

String removeBook(
@RequestParam
("book")
String bookId) {
this.
myService
.deleteBook(bookId);

return
"redirect:myBooks";

}
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

8
Spring 3.0 Themes


Java 5+
foundation


compatible with J2EE 1.4 and Java EE 5


Spring
Expression Language


Unified EL++


Comprehensive
REST support


and other Spring @MVC additions



Declarative
model validation


Hibernate Validator, JSR 303


Support for
Portlet 2.0


action/event/resource request mappings


Early support for
Java EE 6


JSF 2.0, JPA 2.0, etc
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

9
New Project Layout


Framework modules revised


now managed in Maven style


one source tree per module jar


spring-beans.jar, spring-aop.jar, etc


no spring.jar anymore!


Built with new Spring build system as known
from Spring Web Flow 2.0


Ivy-based "Spring Build" system


consistent deployment procedure


consistent dependency management


consistent generation of OSGi manifests
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

10
Core APIs updated for Java 5


BeanFactory interface
returns typed bean
instances
as far as possible


T getBean(String name, Class<T> requiredType)


Map<String, T> getBeansOfType(Class<T> type)


Spring's TaskExecutor interface extends
java.util.concurrent.Executor now


extended AsyncTaskExecutor supports
standard
Callables with Futures


New Java 5 based converter API and SPI


stateless ConversionService and Converters


superseding standard JDK PropertyEditors


Typed ApplicationListener<E>
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

11
EL in Bean Definitions
<bean class="
mycompany.RewardsTestDatabase
">

<property name="
databaseName
"

value="
“#{systemProperties.databaseName}
”/>

<property name="
keyGenerator
"

value="
“#{strategyBean.databaseKeyGenerator}
”/>
</bean>
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

12
EL in Component Annotations
@Repository

public

class
RewardsTestDatabase {
@Value(
“#{systemProperties.databaseName}”
)

public void
setDatabaseName(String dbName) { … }
@Value(
“#{strategyBean.databaseKeyGenerator}”
)


public void
setKeyGenerator(KeyGenerator kg)
{ … }
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

13
Powerful Spring EL Parser


Custom expression parser implementation

shipped as part of Spring 3.0


package org.springframework.expression


next-generation expression engine


inspired by Spring Web Flow 2.0's expression support


pluggable and customizable


Compatible with Unified EL but significantly
more powerful


navigating bean properties, maps, etc


method invocations


construction of value objects
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

14
EL Context Attributes


Example showed
access to EL attributes


"systemProperties", "strategyBean"


implicit references in expressions


Implicit attributes
to be exposed by default,
depending on runtime context


e.g. "systemProperties", "systemEnvironment"


global platform context


access to all Spring-defined beans by name


similar to managed beans in JSF expressions


extensible through Scope SPI


e.g. for step scope in Spring Batch
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

15
Web Context Attributes


Implicit web-specific attributes
to be
exposed by default as well


"contextProperties": web.xml init-params


"contextAttributes": ServletContext attributes


"request": current Servlet/PortletRequest


"session": current Http/PortletSession


Exposure of all
implicit JSF objects
when
running within a JSF request context


"param", "initParam", "facesContext", etc


full compatibility with JSF managed bean facility
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

16
REST Support


Spring MVC to provide first-class support for
REST-style mappings


extraction of URI template parameters


content negotiation in view resolver


Goal:
native REST support
within Spring
MVC, for UI as well as non-UI usage


in natural MVC style


Alternative:
using JAX-RS
through integrated
JAX-RS provider (e.g. Jersey)


using the JAX-RS component model to build
programmatic resource endpoints
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

17
REST in MVC - @PathVariable
@RequestMapping(value = "/rewards/{id}", method =
GET)
public
Reward reward(
@PathVariable("id")
long id)
{
return

this.
rewardsAdminService
.findReward(id);
}

http://rewarddining.com/rewards/12345
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

18
Different Representations


JSON


XML


ATOM
GET http://rewarddining.com/accounts/1 accepts
application/json

GET http://rewarddining.com/accounts/1
.json

GET http://rewarddining.com/accounts/1 accepts
application/xml

GET http://rewarddining.com/accounts/1
.xml

GET http://rewarddining.com/accounts/1 accepts
application/atom+xml

GET http://rewarddining.com/accounts/1
.atom

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

19
Common @MVC Refinements


More options for handler method parameters


in addition to @RequestParam and @PathVariable


@RequestHeader:
access to request headers


@CookieValue:
HTTP cookie access


supported for Servlet MVC and Portlet MVC
@RequestMapping("/show")
public
Reward show(
@RequestHeader("region")
long
regionId,


@CookieValue("language")
String langId) {
...
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

20
Model Validation
public

class
Reward {

@NotNull
@Past
private
Date
transactionDate
;
}
In view:

<form
:input
path
=
"transactionDate"
>


Same metadata can be used for persisting, rendering, etc


Spring: to be supported for MVC data binding


JSR-303 "Bean Validation"
as the common ground
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

21
Portlet 2.0 Support


Portlet 2.0: major new capabilities


explicit action name concept for dispatching


resource requests
for servlet-style serving


events
for inter-portlet communication


portlet filters analogous to servlet filters


Spring's Portlet MVC 3.0 to support
explicit
mapping annotations


@ActionMapping, @RenderMapping,
@ResourceMapping, @EventMapping


specializations of Spring's @RequestMapping


supporting action names, window states, etc
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

22
Spring Portlet MVC 3.0
@Controller
@RequestMapping("EDIT")
public class
MyPortletController {

@ActionMapping("delete")

public void

removeBook
(@RequestParam
("book") String
bookId) {
this.
myService
.deleteBook(bookId);
}
@EventMapping("BookUpdate")

public void

updateBook(BookUpdateEvent bookUpdate)
{
// extract book entity data from event payload
object
this.
myService
.updateBook(…);
}
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

23
Conversation Management


Key problem:
isolating concurrent windows

in same browser


shared HTTP session


identified by shared browser cookie


several independent conversations going on


keeping independent state


Generalized:
conversation scope
with shorter
lifetime than session


scope="conversation"


on-demand scoping of conversational Spring beans


MyFaces Orchestra style


Spring Web Flow 3 to share common conversation
management foundation with Spring MVC
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

24
Scoped Bean Serializability


Problem with Spring 2.5:
serializability
of
session and conversation objects


when referencing shared service objects via Spring
dependency injection


and not marking them as transient


typical situation: scoped bean instance holds on to
DataSource or the like


DataSource reference is not serializable


-> whole bean not serializable


Solution: proxies that
reobtain references on
deserialization


from current Spring WebApplicationContext
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

25
Scheduling Enhancements


Spring 3.0 introduces a
major overhaul of
the scheduling package


extended java.util.concurrent support


prepared for JSR-236 "Concurrency Utilities for Java EE"


TaskScheduler interface with Triggers


including
cron expression triggers


@Async annotation for asynchronous user methods


@Scheduled for cron-triggered methods


XML
scheduling namespace


cron expressions with method references


convenient executor service setup
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

26
Spring 3.0 and Java EE 6


Early Java EE 6 API support
in Spring 3.0


integration with
JSF 2.0


full compatibility as managed bean facility


integration with
JPA 2.0


support for lock modes, query timeouts, etc


support for
JSR-303 Bean Validation
annotations


through Hibernate Validator 4.0 integration


all embeddable on Tomcat 5.5+ / J2EE 1.4+


Spring 3.2:
support for Java EE 6 platforms


Servlet 3.0 (waiting for GlassFish 3 and Tomcat 7)


JSR-236 "Concurrency Utilities for Java EE"
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

27
Portfolio Rearrangements


Spring 3.0 M2 includes a revised version of the
Object/XML Mapping (OXM)
module


known from Spring Web Services


also useful e.g. for SQL XML access


Spring 3.0 M3 features a
revised binding and
type conversion
infrastructure


including the capabilities of Spring Web Flow's binding


stateless type converter objects with EL integration


Spring 3.0 M3 also includes the core
functionality of Spring
JavaConfig


configuration classes defining managed beans


common handling of
annotated factory methods
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

28
Pruning & Deprecation in 3.0


Some
pruning:
removal of outdated features


Commons Attributes support


superseded by Java 5 annotations


traditional TopLink API support


in favor of JPA (EclipseLink)


subclass-style Struts 1.x support


Some
deprecation:
superseded features


traditional MVC form controller hierarchy


superseded by annotated controller style


traditional JUnit 3.8 test class hierarchy


superseded by test context framework


several outdated helper classes
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

29
Spring 2.5 Mission Continued


Spring 3
continues Spring 2.5's mission


fully embracing Java 5 in the core Spring
programming and configuration model


now with even the core framework requiring Java 5


all framework classes using Java 5 language syntax


Backwards compatibility
with Spring 2.5


100% compatibility of programming model


95% compatibility of extension points


all previously deprecated API to be removed


Make sure you're not using outdated Spring 1.2 / 2.0
API anymore!
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

30
Spring 3.0 Summary


Spring 3.0
embraces REST and EL


full-scale REST support


broad Unified EL++ support in the core


Spring 3.0 significantly extends and
refines
annotated web controllers


RESTful URI mappings


annotation-based model validation


Spring 3.0 remains
backwards compatible
with Spring 2.5
on Java 5+


enabling a smooth migration path