《研磨struts2》第十五章 整合Spring 之 15.1 概述
15.1??概述15.1.1应用程序的分层
在前面学习了Struts2中的各个核心技术和多种组件,但是,在真正做项目的时候,Struts2只是帮我们处理Web层的日常任务和常见问题,那么,其他的部分呢?
?????? 在实际项目开发的时候,通常把程序划分成很多层次,也就是分层开发,比如大家熟悉的三层开发:表现层、逻辑层、数据层,它们的职责分别是:
- 表现层:展示数据、人机交互、收集参数并调用逻辑层
- 逻辑层:进行数据的逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层等
- 数据层:实现数据持久化、实现对象和持久化数据的双向映射等
?????? 在这三层交互的时候,通常有如下约定:
- 表现层调用逻辑层,逻辑层调用数据层,不能反向调用,也不会跨层调用。
- 层间交互应该通过接口进行调用,以确保各层实现独立变化。

图15.1 表现层、逻辑层、数据层之间的关系
Struts2就是一个表现层的框架,接下来就来看看动作类Action如何调用逻辑层组件,通过一个简单得示例来做说明,只是做出示范性质的逻辑层接口与逻辑层实现,并不实现实际的功能。示例代码如下:
?
java代码:查看复制到剪贴板打印- public?interface?SampleService?{??
- ????public?String?getNameById(String?userId);??
- }??
- public?class?SampleServiceImpl?implements?SampleService{??
- ????public?String?getNameById?(String?userId)?{??
- ????????//根据userId到数据层进行查询,获取相应的name??
- ????????String?name?=?"hello,"+?userId;??
- ????????return?name;??
- ????}??
- }??
接下来写一个示范性质的Action,实现根据用户输入的编号去获取用户名字的功能,Action中会先得到用户的编号,然后去调用逻辑层接口获取用户名字,将名字保存下来供下一个页面使用。示例代码如下:
?
java代码:查看复制到剪贴板打印- public?class?SampleAction?extends?ActionSupport{??
- ????private?String?name;??
- ????private?String?userId;??
- ????public?String?getName()?{??
- ????????return?name;??
- ????}??
- ????public?void?setName(String?name)?{??
- ????????this.name?=?name;??
- ????}??
- ????public?String?getUserId()?{??
- ????????return?userId;??
- ????}??
- ????public?void?setUserId(String?userId)?{??
- ????????this.userId?=?userId;??
- ????}??
- ??????
- ????public?String?execute()?throws?Exception?{??
- ????????SampleService?sampleService?=?new?SampleServiceImpl();??
- ????????name?=?sampleService.getNameById(userId);??
- ??????????
- ????????return?SUCCESS;??
- ????}??
- }??
注意:在前面讲过表现层在调用逻辑层的时候,通常应该通过接口调用。仔细看一下,这个Action代码写的符合要求吗?
Action作为表现层组件,在调用逻辑层组件的时候,只应该知道逻辑层组件的接口,也就是SampleService接口,但是在execute方法里还是出现了逻辑层组件的实现类,也就是SampleServiceImpl类,这显然是不符合要求的,那怎么办呢?
不要着急,继续往下看,其中一个优秀的解决方案就是使用Spring。
15.1.2使用Spring管理对象间的依赖关系
在上一节的示例中,SampleAction调用了SampleServiceImpl的方法,也可以这么说,SampleAction作为客户端依赖于SampleServiceImpl这个服务端。那么,该怎么管理它们之间的依赖关系呢?很显然,可以借助Spring框架来管理对象间的依赖关系。
Spring的知识很多,这里并不会详细讲解Spring的知识,只是一起来看看Struts2和Spring如何结合起来,并使用Spring框架的IoC/DI容器来管理对象之间的依赖关系。
另外,这里只讲述Spring中和Struts2相关的知识,更多Spring的知识,请参看Spring的文档或是资料。
?
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/4135.html】
欢迎访问http://sishuok.com获取更多内容
