没有合适的资源?快使用搜索试试~ 我知道了~
Spring框架从创建伊始就致力于为复杂问题提供强大的、非侵入性的解决方案。Spring 2.0当中为缩减XML配置文件数量引入定制命名空间功能,从此它便深深植根于核心Spring框架(aop、context、jee、jms、 lang、tx和util命名空间)、Spring Portfolio项目(例如Spring Security)和非Spring项目中(例如CXF)。
资源推荐
资源详情
资源评论
Spring 注解使用方法
框架从创建伊始就致力于为复杂问题提供强大的、非侵入性的解决方案。
当中为缩减 配置文件数量引入定制命名空间功能,从此它便深深植根于核心 框架
(、、、、 、 和 命名空间)、 项目(例如
)和非 项目中(例如 )。
推出了一整套注解,作为基于 的配置的替换方案。注解可用于 管理对象的
自动发现、依赖注入、生命周期方法、 层配置和单元!集成测试。
探索 中引入的注解技术系列文章由三部分组成,本文是其中的第二篇,它主要讲述了
层中的注解支持。最后一篇文章将着重介绍可用于集成和测试的其它特性。
这个系列文章的第一部分论述了 "# 注解()是如何代替 来配置 管理对
象和依赖注入的。我们再用一个例子回顾一下:
$
%
#&'
$()*
+,%
-.'
/
$ 表明 是 层组件,$()* 请求一个被依赖注入的
实例。这个例子只需要少量的 语句就能使容器识别两个注解,并限定组件的扫描范围:
012 23.4)34!5
这对 层可谓是个福音,因为在这层 的 配置文件已日益臃肿,甚至可能还不如层下
的配置来得有用。控制器掌握着许多属性,例如视图名称、表单对象名称和验证器类型,这些多是
关乎配置的,甚少关于依赖注入的。通过 定义继承,或者避免配置变化不是很频繁的属性,
也可以有效的管理类似的配置。不过以我的经验,很多开发人员都不会这样做,结果就是 文件
总比实际需要的要庞大。不过 $ 和$()* 对 层的配置会产生积极的作用。
在系列文章的第二部分我们将继续讨论这个问题,并浏览 在 层的注解技术。这些
注解被非正式的称为$6,它涉及到了 6 和 6,实际上本文讨论的
大部分功能都可以应用在这两个框架上。
从 Controller 到@Controller
与第一部分讨论的注解相比,$6 已不只是作为配置的一种替换方案这样简单了,考虑下面这个
著名的 6 控制器签名:
%
*(*6)-*78+9#788:9#7
,-);'
/
所有的 6 控制器要么直接实现 接口,要么就得扩展类似
( 、 、 ( 或
( <* 这样的基类实现。正是 接口允许 6 的
=-# 把所有上述对象都看作是“处理器(-*)”,并在一个名为
9*(* 的适配器的帮助下调用它们。
$6 从三个重要的方面改变了这个程序设计模型:
1 不需要任何接口或者基类。
2 允许有任意数量的请求处理方法。
3 在方法签名上具有高度的灵活性。
考虑到以上三个要点,就可以说很公平的说$6 不仅仅是个替换方案了,它将会是 6
的控制器技术演变过程中下一个重要步骤。
=-# 在名为 (-*9*(* 的适配器帮助下调用被注解的控
制器。正是这个适配器做了大量工作支持我们此后将会讨论的注解,同时也是它有效的取代了对于
控制器基类的需求。
@RequestMapping 简介
我们还是从一个类似于传统的 6 控制器开始:
$
(%
#(77'
$()*
(+(77,%
-7.7'
/
$78+4!!-)4,
*(*6)-)+9#788:
9#7,-);%
.#78>+8:4 4,'
*(*6)#.)*(*6)+4!;?2@A!#)!!-)4,'
#**B +44:7&*(+ ,,'
#'
/
/
此处与以往的不同在于,这个控制器并没有扩展 接口,并且它用$78
注解指明 -)+,是映射到 >7@ 路径 “!!-)C的请求处理方法。除此以外,其余代码都是
一个典型的 6 控制器应有的内容。
在将上述的方法完全转化到$6 后,我们会再回过头来看$78,但是在此之前
还有一点需要提请注意,上面的请求映射 >7@ 也可匹配带有任意扩展名的 >7@ 路径,例如:
!!-)-
!!-)
!!-)*
灵活的请求处理方法签名
我们曾经承诺过要提供灵活的方法签名,现在来看一下成果。输入的参数中移除了响应对象,增加
了一个代表模型的 ;返回的不再是 *(*6),而是一个字符串,指明呈现响应时要用
的视图名字:
$78+4!!-)4,
-)+9#788:0:B 5*,
-);%
.#78>+8:4 4,'
*+44:7&*(+ ,,'
4!;?2@A!#)!!-)4'
/
输入参数是一个“隐式的”模型,对于我们来说在调用方法前创建它很方便,其中添加的键—值
对数据便于在视图中解析应用。本例视图为 -) 页面。
$6 可以接受多种类型的输入参数,例如
9#78!9#7、9、、@、
B、DE等等,它们的顺序不受任何限制;同样它也允许多种返回类型,例如
*(*6)、、 ,或者什么都不返回。你可以查看$78 的
"#= 以了解它支持的所有输入和返回参数类型。
有种令人感兴趣的情形是当方法没有指定视图时(例如返回类型为 #*)会有什么事情发生,按照
惯例 =-# 要再使用请求 >7@ 的路径信息,不过要移去前面的斜杠和扩展名。让我们
把返回类型改为 #*:
$78+4!!-)4,
#*-)+9#788:0:B 5*,-)
;%
.#78>+8:4 4,'
*+44:7&*(+ ,,'
/
对于给定的请求处理方法和“!!-)C的请求映射,我们可以期望 =-# 能
够获得“!-)C的默认视图名称,当它与如下适当的视图解析器结合共同作用时,会产生
与前面指明返回视图名同样的结果:
0 .4)3) ##)@76)7#45
0.4&4#.4!;?2@A!#)!4!5
0.4F4#.44!5
0! 5
强烈推荐视图名称依赖惯例的方式,因为这样可以从控制器代码中消除硬编码的视图名称。如果你
想定制 =-# 获取默认视图名的方式,就在 # 上下文环境中配置一个你自己的
78G6)AG 实现,并为其 * 赋名为“#)AGC。
用@RequestParam 提取和解析参数
$6 另外一个特性是其提取和解析请求参数的能力。让我们继续重构上面的方法,并在其中添加
$78 注解:
$78+4!!-)4,
#*-)+$78+4 4, :0:B 5
*,%
剩余26页未读,继续阅读
资源评论
奇军
- 粉丝: 2
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功