《研磨struts2》第十五章 整合Spring 之 15.1 概述

15.1  概述

15.1.1应用程序的分层

在前面学习了Struts2中的各个核心技术和多种组件,但是,在真正做项目的时候,Struts2只是帮我们处理Web层的日常任务和常见问题,那么,其他的部分呢?

       在实际项目开发的时候,通常把程序划分成很多层次,也就是分层开发,比如大家熟悉的三层开发:表现层、逻辑层、数据层,它们的职责分别是:

  • 表现层:展示数据、人机交互、收集参数并调用逻辑层
  • 逻辑层:进行数据的逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层等
  • 数据层:实现数据持久化、实现对象和持久化数据的双向映射等

       在这三层交互的时候,通常有如下约定:

  • 表现层调用逻辑层,逻辑层调用数据层,不能反向调用,也不会跨层调用。
  • 层间交互应该通过接口进行调用,以确保各层实现独立变化。

图15.1 表现层、逻辑层、数据层之间的关系

Struts2就是一个表现层的框架,接下来就来看看动作类Action如何调用逻辑层组件,通过一个简单得示例来做说明,只是做出示范性质的逻辑层接口与逻辑层实现,并不实现实际的功能。示例代码如下:

 

java代码:
  1. public interface SampleService {  
  2.     public String getNameById(String userId);  
  3. }  
  4. public class SampleServiceImpl implements SampleService{  
  5.     public String getNameById (String userId) {  
  6.         //根据userId到数据层进行查询,获取相应的name  
  7.         String name = "hello,"+ userId;  
  8.         return name;  
  9.     }  
  10. }  

接下来写一个示范性质的Action,实现根据用户输入的编号去获取用户名字的功能,Action中会先得到用户的编号,然后去调用逻辑层接口获取用户名字,将名字保存下来供下一个页面使用。示例代码如下:

 

java代码:
  1. public class SampleAction extends ActionSupport{  
  2.     private String name;  
  3.     private String userId;  
  4.     public String getName() {  
  5.         return name;  
  6.     }  
  7.     public void setName(String name) {  
  8.         this.name = name;  
  9.     }  
  10.     public String getUserId() {  
  11.         return userId;  
  12.     }  
  13.     public void setUserId(String userId) {  
  14.         this.userId = userId;  
  15.     }  
  16.       
  17.     public String execute() throws Exception {  
  18.         SampleService sampleService = new SampleServiceImpl();  
  19.         name = sampleService.getNameById(userId);  
  20.           
  21.         return SUCCESS;  
  22.     }  
  23. }  

注意:在前面讲过表现层在调用逻辑层的时候,通常应该通过接口调用。仔细看一下,这个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获取更多内容

猜你喜欢

转载自rubbing-struts2.iteye.com/blog/1559888