`
coolyongzi
  • 浏览: 51336 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring 2.5 基于注解驱动的 Spring MVC 2

阅读更多
注册自己的属性编辑器

Spring MVC 有一套常用的属性编辑器,这包括基本数据类型及其包裹类的属性编辑器、String 属性编辑器、JavaBean 的属性编辑器等。但有时我们还需要向 Spring MVC 框架注册一些自定义的属性编辑器,如特定时间格式的属性编辑器就是其中一例。

Spring MVC 允许向整个 Spring 框架注册属性编辑器,它们对所有 Controller 都有影响。当然 Spring MVC 也允许仅向某个 Controller 注册属性编辑器,对其它的 Controller 没有影响。前者可以通过 AnnotationMethodHandlerAdapter 的配置做到,而后者则可以通过 @InitBinder 注解实现。

下面先看向整个 Spring MVC 框架注册的自定义编辑器:


清单 13. 注册框架级的自定义属性编辑器
>bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"<    >property name="webBindingInitializer"<        >bean class="com.baobaotao.web.MyBindingInitializer"/<    >/property<>/bean<


MyBindingInitializer 实现了 WebBindingInitializer 接口,在接口方法中通过 binder 注册多个自定义的属性编辑器,其代码如下所示:


清单 14.自定义属性编辑器
package org.springframework.samples.petclinic.web;import java.text.SimpleDateFormat;import java.util.Date;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.propertyeditors.CustomDateEditor;import org.springframework.beans.propertyeditors.StringTrimmerEditor;import org.springframework.samples.petclinic.Clinic;import org.springframework.samples.petclinic.PetType;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.support.WebBindingInitializer;import org.springframework.web.context.request.WebRequest;public class MyBindingInitializer implements WebBindingInitializer {    public void initBinder(WebDataBinder binder, WebRequest request) {        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");        dateFormat.setLenient(false);        binder.registerCustomEditor(Date.class,             new CustomDateEditor(dateFormat, false));        binder.registerCustomEditor(String.class, new StringTrimmerEditor(false));    }}


如果希望某个属性编辑器仅作用于特定的 Controller,可以在 Controller 中定义一个标注 @InitBinder 注解的方法,可以在该方法中向 Controller 了注册若干个属性编辑器,来看下面的代码:


清单 15. 注册 Controller 级的自定义属性编辑器
@Controllerpublic class MyFormController {    @InitBinder    public void initBinder(WebDataBinder binder) {        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");        dateFormat.setLenient(false);        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));    }    …}


注意被标注 @InitBinder 注解的方法必须拥有一个 WebDataBinder 类型的入参,以便 Spring MVC 框架将注册属性编辑器的 WebDataBinder 对象传递进来。


如何准备数据

在 编写 Controller 时,常常需要在真正进入请求处理方法前准备一些数据,以便请求处理或视图渲染时使用。在传统的 SimpleFormController 里,是通过复写其 referenceData() 方法来准备引用数据的。在 Spring 2.5 时,可以将任何一个拥有返回值的方法标注上 @ModelAttribute,使其返回值将会进入到模型对象的属性列表中。来看下面的例子:


清单 16. 定义为处理请求准备数据的方法
package com.baobaotao.web;import com.baobaotao.service.BbtForumService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.SessionAttributes;import java.util.ArrayList;import java.util.List;import java.util.Set;@Controller@RequestMapping("/bbtForum.do")public class BbtForumController {    @Autowired    private BbtForumService bbtForumService;    @ModelAttribute("items")//<——①向模型对象中添加一个名为items的属性    public List<String> populateItems() {        List<String> lists = new ArrayList<String>();        lists.add("item1");        lists.add("item2");        return lists;    }    @RequestMapping(params = "method=listAllBoard")    public String listAllBoard(@ModelAttribute("currUser")User user, ModelMap model) {        bbtForumService.getAllBoard();        //<——②在此访问模型中的items属性        System.out.println("model.items:" + ((List<String>)model.get("items")).size());        return "listBoard";    }}


在 ① 处,通过使用 @ModelAttribute 注解,populateItem() 方法将在任何请求处理方法执行前调用,Spring MVC 会将该方法返回值以“items”为名放入到隐含的模型对象属性列表中。

所 以在 ② 处,我们就可以通过 ModelMap 入参访问到 items 属性,当执行 listAllBoard() 请求处理方法时,② 处将在控制台打印出“model.items:2”的信息。当然我们也可以在请求的视图中访问到模型对象中的 items 属性。


小结

Spring 2.5 对 Spring MVC 进行了很大增强,现在我们几乎完全可以使用基于注解的 Spring MVC 完全替换掉原来基于接口 Spring MVC 程序。基于注解的 Spring MVC 比之于基于接口的 Spring MVC 拥有以下几点好处:

方便请求和控制器的映射;
方便请求处理方法入参绑定URL参数;
Controller 不必继承任何接口,它仅是一个简单的 POJO。
但 是基于注解的 Spring MVC 并不完美,还存在优化的空间,因为在某些配置上它比基于 XML 的配置更繁琐。比如对于处理多个请求的 Controller 来说,假设我们使用一个 URL 参数指定调用的处理方法(如 xxx.do?method=listBoardTopic),当使用注解时,每个请求处理方法都必须使用 @RequestMapping() 注解指定对应的 URL 参数(如 @RequestMapping(params = "method=listBoardTopic")),而在 XML 配置中我们仅需要配置一个 ParameterMethodNameResolver 就可以了。
分享到:
评论
1 楼 ibeman 2008-09-03  

    [*]
[img][/img][url][/url][img][/img][url][/url]

    [*]

相关推荐

    使用Spring 2.5 基于注解驱动的 Spring MVC详解

    使用 Spring 2.5 基于注解驱动的 Spring MVC 详解 本文将介绍 Spring 2.5 新增的 Spring MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML 的 Spring MVC 配置。 Spring MVC 注解驱动 在 Spring 2.5 中,...

    Spring 2.5 基于注解驱动的Spring MVC

    Spring 2.5引入了一种基于注解的新方式来驱动Spring MVC框架,使得开发者能够更加简洁、直观地配置和管理控制器。这一变化显著提升了开发效率,减少了XML配置文件的复杂性,同时也使得代码更加模块化。 ### 1. 基于...

    使用 Spring 2.5 基于注解驱动的 Spring MVC

    ### 使用 Spring 2.5 基于注解驱动的 Spring MVC #### 概述与背景 自从Spring 2.0版本对Spring MVC框架进行了重大升级之后,Spring 2.5再次对该框架进行了显著改进,引入了注解驱动的功能。这使得开发人员能够更加...

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    在Spring 2.5版本中,Spring MVC引入了一种新的编程模型,即基于注解的配置,这使得开发者能够更加简洁、直观地构建Web应用程序。本文将深入探讨Spring MVC注解的功能及其在Spring 2.5中的应用。 首先,Spring 2.5...

    Spring 2.5 基于注解驱动的 Spring MVC.docx

    总结,Spring 2.5 引入的基于注解的 Spring MVC 配置极大地简化了开发流程,提高了开发效率,降低了维护成本。通过注解,我们可以快速地定义控制器、处理请求、注入依赖,使得代码结构更加清晰,也更容易理解和维护...

    使用 Spring 2.5 基于注解驱动的 Spring.pdf

    ### 使用Spring 2.5基于注解驱动的SpringMVC:深入解析与实践 #### 核心知识点概览 在Spring 2.5版本中,框架显著增强了对注解的支持,特别是针对SpringMVC(Model-View-Controller)模块,引入了基于注解的配置...

    spring2.5基于注解例子程序

    综上所述,这个"spring2.5基于注解的例子程序"涵盖了Spring 2.5的核心特性,包括注解驱动的配置、自动扫描、基于注解的事务管理、AOP支持、MVC框架的使用,以及依赖注入等。通过学习和理解这个例子,开发者可以更好...

    Spring MVC 基于注解实例

    Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于...

    使用 Spring 2_5 基于注解驱动的 Spring MVC

    在本主题中,我们将深入探讨Spring框架的2.5版本引入的一个重要特性——基于注解的Spring MVC配置。Spring MVC是Spring框架的一部分,专门用于构建Web应用程序,它提供了一个模型-视图-控制器(MVC)架构来组织和...

    Spring2.5_基于注解驱动的SpringMVC

    ### Spring2.5_基于注解驱动的SpringMVC #### 概述 ...综上所述,Spring2.5引入的基于注解驱动的SpringMVC极大地提高了开发效率和代码的可维护性,使得SpringMVC在MVC框架市场上具有更强的竞争力。

    struts2.0 spring2.5 hibernate3.2 注解最新框架

    开发者可能会在该文件中找到一个简单的Struts2 Action,一个带有注解的Spring Bean,以及一个用Hibernate注解配置的实体类。通过分析和运行这个`test`文件,可以更好地理解三大框架如何协同工作,以及注解如何简化...

    Spring2.5注释驱动与基于注释的MVC

    **Spring 2.5 注释驱动与基于注释的 MVC** Spring 2.5 的一个重大改进是引入了全面的注解支持,这使得开发者在编写应用程序时可以减少XML配置,更加专注于业务逻辑。注释驱动的开发不仅提高了代码的可读性,还简化...

    Spring2.5_注解介绍(3.0通用)

    Spring框架在2.5版本引入了对注解的广泛支持,这一特性在后续的3.0版本中得到了进一步增强,并且成为了Spring应用的核心部分。注解的使用极大地简化了Spring配置,提高了代码的可读性和可维护性。下面将详细介绍其中...

    spring2.5 mvc_ibatis2

    《Spring 2.5 MVC与iBatis 2整合详解》 在Web开发领域,Spring框架以其强大的功能和灵活性备受开发者喜爱。Spring 2.5版本是Spring发展史上的一个重要里程碑,它引入了许多新特性,使得开发更加高效。同时,iBatis...

    spring2.5 mvc 完整项目

    《Spring 2.5 MVC 完整项目:深入解析与实践》 在IT行业中,Spring框架作为Java领域的重要支柱,其MVC(Model-View-Controller)模块在Web应用程序开发中占据着举足轻重的地位。本文将针对“Spring 2.5 MVC 完整...

    Spring2.5MVC--基于注解的附件上传

    这篇博客"Spring2.5 MVC -- 基于注解的附件上传"详细介绍了如何在Spring MVC 2.5中实现这一功能。 首先,我们需要了解Spring MVC中处理文件上传的基本概念。文件上传主要涉及到两个组件:`MultipartResolver`和`@...

    Spring2.5-中文参考手册chm

    在Spring 2.5中,Spring MVC引入了更多的注解驱动特性,简化了配置。 **数据访问集成** Spring 2.5增强了对多种数据访问技术的支持,包括JDBC、ORM(Object-Relational Mapping)框架如Hibernate和MyBatis等。它...

    精通Spring2.5pdf书籍proSpring2.5

    在Web开发领域,Spring MVC是其核心组件,Spring 2.5对MVC框架做了大量改进。如支持动态模型绑定,可以自动将HTTP请求参数映射到处理方法的参数上,大大简化了控制器的编写。此外,还增强了视图解析,支持多种视图...

    spring mvc+ibatis+spring2.5注解

    Spring MVC、iBatis 和 Spring 2.5 注解是构建高效、可扩展的企业级 Java 应用程序的常用技术组合。这篇详细的文章将深入探讨这三个组件的核心概念、它们如何协同工作以及如何在实际项目中应用。 首先,Spring MVC ...

Global site tag (gtag.js) - Google Analytics