Servlet3.0下基于注解的SpringMVC3.1配置-完全零配置文件
Spring3.1.x系列的一个新特性就是支持了Servlet3.0规范,基于注解的方式配置SpringMVC框架。官方文档描述如下:
3.1.10 Support for Servlet 3 code-based configuration of Servlet Container
The new WebApplicationInitializer builds atop Servlet 3.0's ServletContainerInitializer support to provide a programmatic alternative to the traditional web.xml.
See org.springframework.web.WebApplicationInitializer Javadoc
Diff from Spring's Greenhouse reference application demonstrating migration from web.xml to WebApplicationInitializer
既然如此,我们就来实现一下。根据WebApplicationInitializer 的注释说明,实现该接口即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* 基于Servlet3.0的,相当于以前<b>web.xml</b>配置文件的配置类
*
* @author OneCoder
* @Blog http://www.coderli.com
* @date 2012-9-30 下午1:16:59
*/
public class DefaultWebApplicationInitializer implements
WebApplicationInitializer {
@Override
public void onStartup(ServletContext appContext)
throws ServletException {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(DefaultAppConfig.class);
appContext.addListener(new ContextLoaderListener(rootContext));
ServletRegistration.Dynamic dispatcher = appContext.addServlet(
"dispatcher", new DispatcherServlet(rootContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
这里说明一下,根据WebApplicationInitializer 类的注释说明(OneCoder建议大家多阅读代码注释(Javadoc),其实也就是API文档。),其实这里有两种初始化rootContext的方式。一种是利用XmlWebApplicationContext,即Spring的配置是通过传统的Xml的方式配置的。另一种就是这里用到的AnnotationConfigWebApplicationContext ,即Spring的配置也是通过注解的方式。这里,我们既然说了是完全零配置文件,那么我就采用第二种方式。利用新建的配置类,配置注解的方式,完成配置。
1
2
3
4
5
6
7
8
9
10
11
/**
* Spring3.1基于注解的配置类, 用于代替原来的<b>applicationContext.xml</b>配置文件
*
* @author lihzh
* @date 2012-10-12 下午4:23:13
*/
@Configuration
@ComponentScan(basePackages = "com.coderli.shurnim.*.biz")
public class DefaultAppConfig {
}
可以看到,基本原有在配置文件里的配置,这里都提供的相应的注解与之对应。这里我们仅仅配置的包扫描的根路径,用于SpringMVC配置的扫描,以进一步达到零配置文件的效果。在业务包下,写一个MVC的controller类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 用户操作Action类
*
* @author lihzh
* @date 2012-10-12 下午4:12:54
*/
@Controller
public class UserAction {
@RequestMapping("/user.do")
public void test(HttpServletResponse response) throws IOException {
response.getWriter().write("Hi, u guy.");
}
}
启动Tomcat,浏览器访问地址: http://localhost:8080/onecoder-shurnim/user.do