Spring Framework 3.0 - The Next Generation

thingpastoralΛογισμικό & κατασκευή λογ/κού

14 Ιουλ 2012 (πριν από 5 χρόνια και 5 μήνες)

915 εμφανίσεις

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.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.
2Spring 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.
3Annotated 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.
4Minimal 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.
5Test 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.
6@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.
7Spring 3.0 Themes
• Java 5+ foundation
– even stronger support for annotated components
• 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.
8New 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.
9Core 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
• Typed ApplicationListener<E>
– ApplicationEventMulticaster detects declared event
type and filters accordingly
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
10Portfolio Rearrangements
• Spring 3.0 includes a revised version of the
Object/XML Mapping (OXM) module
– known from Spring Web Services
– supported for REST-style payload conversion
– also useful e.g. for SQL XML access
• Spring 3.0 features a revised binding and
type conversion infrastructure
– including the capabilities of Spring Web Flow's binding
– stateless Java 5+ type converters with EL integration
– superseding standard JDK PropertyEditors
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
11Annotated Factory Methods
• Spring 3.0 includes the core functionality of the
Spring JavaConfig project
– configuration classes defining managed beans
– common handling of annotated factory methods
@Bean @Primary @Lazy
public RewardsService rewardsService() {
RewardsServiceImpl service = new RewardsServiceImpl();
service.setDataSource(…);
return service;
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
12Use of Meta-Annotations
• More powerful options for custom annotations
– combining meta-annotations e.g. on stereotype
– automatically detected (no configuration necessary!)
@Service
@Scope("request")
@Transactional(rollbackFor=Exception.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyService {}
@MyService
public class RewardsService {

}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
13EL 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.
14EL 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.
15Powerful 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.
16EL 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.
17Web Context Attributes
• Implicit web-specific attributes to be
exposed by default as well
– "contextParameters": 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.
18REST 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.
19REST in MVC - @PathVariable
http://rewarddining.com/rewards/12345
@RequestMapping(value = "/rewards/{id}", method = GET)
public Reward reward(@PathVariable("id") long id) {
return this.rewardsAdminService.findReward(id);
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
20Different Representations
• JSON
GET http://rewarddining.com/accounts/1 accepts application/json
GET http://rewarddining.com/accounts/1.json
• XML
GET http://rewarddining.com/accounts/1 accepts application/xml
GET http://rewarddining.com/accounts/1.xml
• ATOM
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.
21Common @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.
22Portlet 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.
23Spring 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.
24Model 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 3.0 RC1: 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.
25Scoped 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.
26Scheduling 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.
27Spring 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.x: 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.
28Spring 3.0 Platform Support
• Requires Java 5 or above
– Java 6 automatically detected & supported
• Web container: Servlet 2.4 or above
– e.g. Tomcat 5.5 & 6.0
• Java EE level: J2EE 1.4 or above
– e.g. WebSphere 6.1 & 7.0
• Fully OSGi compatible out of the box
– featured in dm Server 2.0
• Also compatible with Google App Engine
– and other 'special' hosting environments
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
29Pruning & 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.
30Spring 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.
31Spring 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
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
32Spring 3.0 Roadmap
• Spring Framework 3.0 M3 to be released
any day now
– last milestone before RC1
• Spring Framework 3.0 RC1 scheduled for
late May 2009
– GA to follow soon after
• Spring Framework 3.1 expected in
Q4 2009
– full compatibility with Java EE 6 platforms
– first-class support for conversation management
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
33Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
34