Chapter 9: Spring Integration"
(→Maven) |
|||
Line 39: | Line 39: | ||
* list required configuration | * list required configuration | ||
--> | --> | ||
+ | |||
+ | The deployment descriptor (web.xml) also needs two more listeners. | ||
'''Extracted from web.xml''' | '''Extracted from web.xml''' | ||
Line 69: | Line 71: | ||
</web-app> | </web-app> | ||
</source> | </source> | ||
+ | * Line 16: The <tt>ContextLoaderListener</tt> reads Spring configuration, and default location is <tt>WEB-INF/applicationContext.xml</tt>. | ||
+ | * Line 20: Use <tt>RequestContextListener</tt> to support web-scoped beans (<tt>request</tt>, <tt>session</tt>, <tt>global session</tt>). | ||
+ | |||
+ | Create Spring configuration file with default name (<tt>applicationContext.xml</tt>). | ||
'''WEB-INF/applicationContext.xml''' | '''WEB-INF/applicationContext.xml''' | ||
Line 87: | Line 93: | ||
</source> | </source> | ||
+ | * Line 10: This configuration enables scanning classpath, automatically detecting classes, and registering bean definitions. | ||
== Define Spring Beans == | == Define Spring Beans == |
Revision as of 10:22, 31 January 2013
Overview
Spring Framework is a popular application development framework for enterprise Java. One key element is its infrastructural support: a light-weighted IoC (Inversion of Control) container that manages POJOs as Spring beans and their dependency relationship.
In this chapter, we won't create new example applications but will make previous examples integrated with Spring.
How to Integrate Spring Framework
The most common integration way is to let Spring manage an application's dependencies.
Configuration
Maven
In order to integrate Spring, we must add dependencies for Spring. The cglib is an optional dependency, we add it because our application uses proxy beans that requires it.
Extracted from pom.xml
<properties>
<zk.version>6.5.1</zk.version>
<maven.build.timestamp.format>yyyy-MM-dd</maven.build.timestamp.format>
<packname>-${project.version}-FL-${maven.build.timestamp}</packname>
<spring.version>3.1.2.RELEASE</spring.version>
</properties>
...
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
Deployment Descriptor
The deployment descriptor (web.xml) also needs two more listeners.
Extracted from web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<description><![CDATA[ZK Tutorial]]></description>
<display-name>ZK Tutorial</display-name>
<!-- ZK configuration-->
...
<!-- Spring configuration -->
<!-- Initialize spring context -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Enable webapp Scopes-->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.zul</welcome-file>
</welcome-file-list>
</web-app>
- Line 16: The ContextLoaderListener reads Spring configuration, and default location is WEB-INF/applicationContext.xml.
- Line 20: Use RequestContextListener to support web-scoped beans (request, session, global session).
Create Spring configuration file with default name (applicationContext.xml).
WEB-INF/applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="org.zkoss.tutorial" />
</beans>
- Line 10: This configuration enables scanning classpath, automatically detecting classes, and registering bean definitions.
Define Spring Beans
@Service("authService")
@Scope(value="singleton",proxyMode=ScopedProxyMode.TARGET_CLASS)
public class AuthenticationServiceImpl implements AuthenticationService,Serializable{
...
}
reason for request scope ?
@Component("sidebarPageConfigPagebase")
@Scope(value="request",proxyMode=ScopedProxyMode.TARGET_CLASS)
public class SidebarPageConfigPagebaseImpl implements SidebarPageConfig{
...
}
Retrieve Spring Beans
@VariableResolver(DelegatingVariableResolver.class)
public class SidebarChapter4Controller extends SelectorComposer<Component>{
private static final long serialVersionUID = 1L;
//wire components
@Wire
Grid fnList;
//wire service
@WireVariable("sidebarPageConfigPagebase")
SidebarPageConfig pageConfig;
...
}
@VariableResolver(DelegatingVariableResolver.class)
public class ProfileViewModel implements Serializable{
private static final long serialVersionUID = 1L;
//wire services
@WireVariable
AuthenticationService authService;
@WireVariable
UserInfoService userInfoService;
...
}