已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,J2EE开发常用软件体系架构模式,华南师范大学软件学院,作者:杨劲松,struts, hibernate, spring 及其衍生框架,主要内容:,1、软件体系架构,软件无处不在,9/6/2019,华南师范大学软件学院,3,1、软件体系架构,软件开发现状,9/6/2019,华南师范大学软件学院,4,1、软件体系架构,软件危机的案例,9/6/2019,华南师范大学软件学院,5,IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。 OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。”,1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序: DO 5 I=1,3 误写为:DO 5 I=1.3,1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁,1、软件体系架构,软件为什么会失效,9/6/2019,华南师范大学软件学院,6,1、软件体系架构,产生软件危机的根源,9/6/2019,华南师范大学软件学院,7,软件规模越来越大、复杂度越来越高 用户需求不明确 缺乏正确有效的理论及工程指导 对用户要求、实现条件没有完整准确的分析就匆忙编写程序,是许多软件开发失败的主要原因,在此种背景下,人们认识到软件体系架构的重要性,软件工程研究初期重点放在数据结构和算法的选择,如 Knuth 提出了数据结构 + 算法 = 程序,1、软件体系架构,什么是软件体系架构,Dewayne Perry和A1exander Wo1f,软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。,处理构件负责对数据进行加工 数据构件是被加工的信息 连接构件把体系结构的不同部分组组合连接起来,Mary Shaw 和 David Garlan,软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计,关于整体系统结构设计和描述方面的一些问题,如: 全局组织和全局控制结构 关于通讯、同步与数据存取的协议,等,9/6/2019,华南师范大学软件学院,8,1、软件体系架构,什么是软件体系架构,Kruchten,软件体系结构有四个角度,它们从不同方面对系统进行描述:,概念角度描述系统的主要构件及它们之间的关系; 模块角度包含功能分解与层次结构; 运行角度描述了一个系统的动态结构; 代码角度描述了各种代码和库函数在开发环境中的组织,不同研究背景、应用背景的人员从不同的角度给出了多达近百种定义,但有两点共识:,软件体系结构对于软件开发具有重要意义,必须采用良好的设计原则达到良好的结构设计 主流的定义都认为:软件体系结构是用来表示软件系统的总体结构的,该结构由软件构件和构件之间的关系及约束构成,9/6/2019,华南师范大学软件学院,9,2、J2EE的体系架构,J2EE,为企业应用系统的开发提供了一种多层分布式企业应用模型 按应用逻辑按功能不同可以划分为不同类型的组件,9/6/2019,华南师范大学软件学院,客户层,运行在客户计算机上的组件。 Web 层,运行在J2EE服务器上的组件。 业务层,同样是运行在J2EE服务器上的组件。 企业信息系统层(EIS),是指运行在EIS服务器上的软件系统。,J2EE分层结构,2、J2EE的体系架构,J2EE,9/6/2019,华南师范大学软件学院,11,2、J2EE的体系架构,J2EE,9/6/2019,华南师范大学软件学院,12,2、J2EE的体系架构,J2EE,9/6/2019,华南师范大学软件学院,13,2、J2EE的体系架构,9/6/2019,华南师范大学软件学院,14,什么是模式?什么是框架?,模式,即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度,那就是模式。 模式分为: 体系结构模式 设计模式 框架,即framework。建立在体系结构模式的基础上。包括大量组件,设计模式,与某一领域的具体应用无关。,C/S:以数据库为中心 B/S多层架构将显示、业务运算、数据库等功能完全分离,杜绝彼此的耦合与影响,从而实现松耦合和良好的可维护性。,3、 SSH框架,9/6/2019,华南师范大学软件学院,15,SSH简介,Struts(表示层)+Spring(业务层)+Hibernate(持久层),9/6/2019,华南师范大学软件学院,16,3、 SSH框架,SSH简介,Struts(表示层)+Spring(业务层)+Hibernate(持久层),9/6/2019,华南师范大学软件学院,17,3、 SSH框架,SSH简介,Struts(表示层)+Spring(业务层)+Hibernate(持久层),9/6/2019,华南师范大学软件学院,18,3、 Struts,Model1与Model2设计模式,以JSP为中心的开发模型,称为Model1(JSP+JAVABEAN) 业务逻辑与表示逻辑混和,不利维护与重用 HTML中嵌入了大量的JAVA代码 验证、流程控制、更新程序的状态全部在JSP中完成,Enterprise Servers/ Data Sources,传统的Model 1(JSP+JAVABEAN),9/6/2019,华南师范大学软件学院,19,3、 Struts,Model1与Model2设计模式,以servlet为中心的开发模型,Model2(JSP+Servlet+JAVABEAN),Model2(JSP+Servlet+JAVABEAN),MVC是一种设计模式,它强制性地把应用程序的输入、处理和输出分开。MVC将应用程序分成3部分:模型、视图和控制器。,9/6/2019,华南师范大学软件学院,20,3、 Struts,MVC模式,MVC模式 模型(Model)是应用程序的主体部分。模型表示业务数据,或者业务逻辑。 视图(View)是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。 控制器(Controller)工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。,(控制器) 接受用户请求 调用模型响应用户请求 选择视图显示响应结果,(视图) 显示模型状态 接受数据更新请求 把用户输入数据传给控制器,(模型) 代表应用程序状态 响应状态查询 处理业务流程 通知视图业务状态更新,方法调用,事件,选择视图,业务处理,用户请求,状态查询,通知数据更新,9/6/2019,华南师范大学软件学院,21,3、 Struts,Struts框架概述,Struts是一个现成的、优秀的、基于MVC的Web应用框架。,浏 览 器,Web 服务器,ActionServlet,FormBean,(模型) JavaBean EJB,Struts-config.xml,数据库,Message Resouse,JSP,(视图),(控制器),Servlet/JSP容器,Struts框架结构,9/6/2019,华南师范大学软件学院,22,3、 Struts,Struts框架概述,Struts是一个现成的、优秀的、基于MVC的Web应用框架。,浏 览 器,Web 服务器,ActionServlet,FormBean,(模型) JavaBean EJB,Struts-config.xml,数据库,Message Resouse,JSP,(视图),(控制器),Servlet/JSP容器,Struts框架结构,9/6/2019,华南师范大学软件学院,23,3、 Struts,Struts框架概述,Struts是一个现成的、优秀的、基于MVC的Web应用框架。,浏 览 器,Web 服务器,ActionServlet,FormBean,(模型) JavaBean EJB,Struts-config.xml,数据库,Message Resouse,JSP,(视图),(控制器),Servlet/JSP容器,Struts框架结构,9/6/2019,华南师范大学软件学院,24,3、 Struts,Struts的程序流程,JavaBean,JSP页面,Client,Action,ActionServlet,ActionForm,1.HTTP 请求,2.填充FormBean,3.转发HTTP请求,4.调用ActionForm,5.调用JavaBean,6.回送ActionForward,7.转发HTTP请求,8.调用JavaBean,9.HTTP响应,Struts-config.xml,Struts的程序流程,9/6/2019,华南师范大学软件学院,25,3、 Struts,Struts1.x实例,Struts1.x实例(实现用户登录操作) 用户将看到一个登录页面,要求用户输入用户名以及密码 如果用户名以及密码都是admin,提示登录成功 否则提示登录失败,Login.jsp,login_error.jsp,login_success.jsp,9/6/2019,华南师范大学软件学院,26,3、 Struts,Struts1.x实例,Struts1.x实例(实现用户登录操作) 下载并解压Struts项目 从Apache网站下载struts; 将压缩包解压到一个目录,此目录为STRUTS_HOME目录; 安装Struts 将STRUTS_HOME/lib目录下的所有.jar文件拷贝到刚创建的web项目的/WEB-INF/lib目录下; 配置web.xml,添加Servlet映射配置; 编写Action类、编写ActionForm类 Action类处理业务流程; ActionForm类不是必须的,如果要接收客户端提交的数据时需要; 配置struts-config.xml 在struts-config.xml文件中配置Action和ActionForm ; 编写相应JSP页面,9/6/2019,华南师范大学软件学院,27,3、 Struts,web.xml 的配置, action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml 2 action *.do ,struts-config.xml存放路径,在显示层所有以*.do为扩展名提交的URL,都会交由这个Servlet来处理。,9/6/2019,华南师范大学软件学院,28,3、 Struts,struts-config.xml 的配置,指定Struts应用中所有使用的ActionForm对象,ActionForm对象指定处理相关业务的Action,Action处理完业务后的跳转页面,9/6/2019,华南师范大学软件学院,29,3、 Struts,LoginActionForm.java,public class LoginActionForm extends ActionForm private String userName; private String passWord; public String getUserName() return userName; public void setUserName(String userName) this.userName = userName; public String getPassWord() return passWord; public void setPassWord(String passWord) this.passWord = passWord; ,9/6/2019,华南师范大学软件学院,30,3、 Struts,LoginAction.java,public class LoginAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception String path = “error“; LoginActionForm loginActionForm = (LoginActionForm)form; String userName = loginActionForm.getUserName(); String passWord = loginActionForm.getPassWord(); if(null != userName ,9/6/2019,华南师范大学软件学院,31,3、 Struts,LoginAction应用程序的流程图,LoginAction应用程序的流程图,9/6/2019,华南师范大学软件学院,32,3、 Struts,Struts1.x与Struts2.x,Struts2同为MVC设计模式的开源框架 在Struts2并不是在原有的Struts1.x基础上的升级版本,而是来处另外一个非常有名的MVC框架 WebWork。,官方描述:,Struts1.x存在的问题: 在表现层技术单一 与Servlet API耦合严重,不便于测试 代码严重依赖Struts API 单元测试困难 令人头痛的ActionForm,Struts2的特点 无需与Servlet API整合,更容易测试 优雅的请求参数封装 灵活的视图技术 丰富的表达式语言 机动,灵活,简单的配置 线程安全的控制器(Action),9/6/2019,华南师范大学软件学院,33,3、 Struts, Struts2.x框架结构,Struts2框架结构 Struts2的体系与Struts1.x体系差别非常大,因为Struts2使用了WebWork的设计核心(XWork)。在Struts2中使用拦截器来处理用户请求,从而允许用户业务逻辑控制器与Servlet API分离。,9/6/2019,华南师范大学软件学院,34,3、 Struts, Struts2.x框架结构,Struts2框架结构 Struts2的体系与Struts1.x体系差别非常大,因为Struts2使用了WebWork的设计核心(XWork)。在Struts2中使用拦截器来处理用户请求,从而允许用户业务逻辑控制器与Servlet API分离。,9/6/2019,华南师范大学软件学院,35,3、 Struts,Struts2的核心思想,仍然是MVC设计模式 Struts2的控制器由两部分组成 FilterDispatcher 业务逻辑Action Struts2提供了丰富的视图展示 JSP FreeMarker、Velocity JasperReport等报表类型 AOP(Aspect Oriented Programming)面向方面编程实现 在执行Action的前后Structs2提供了大量拦截器来完成通用功能,9/6/2019,华南师范大学软件学院,36,3、 Struts,补充:面向方面编程AOP,OOP 选择对象作为模块的主要单元,将对象与系统的所有行为联系起来 对象成为问题领域和计算过程的主要元素 问题: 存在着许多横切关注点(如安全性检查、日志记录、异常处理等) 实现代码和其他业务逻辑代码混杂在一起、降低了模块的可重用性 AOP简介(也叫面向切面编程) 目标:对业务逻辑的各个部分进行隔离 主要功能: 日志记录,性能统计,安全控制,事务处理,异常处理等等 主要意图: 将日志记录等代码从业务逻辑代码中划分出来 通过对这些行为的分离,将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。,9/6/2019,华南师范大学软件学院,37,3、 Struts,补充:面向方面编程AOP,AOP 与OOP 抽象类 Dog 类 Poodle 继承了 Dog,Dog,Poodle,Obedient Dog,定义标识为 Obedient Dog的类,不是所有的 Dogs 都很驯服 如果要Obedient Dog 类继承 Dog 类,那么 Poodle 放在这个层次结构中的哪个位置合适呢?,?,Obedient看作一个方面 应用到任何一类驯服的 Dog 我们反对以不恰当的方式强制将该行为放在 Dog 层次结构中,9/6/2019,华南师范大学软件学院,38,3、 Struts,Struts2.x拦截器,拦截器(Interceptor) Struts2的核心组成部分 例如文件的上传和下载、国际化、转换器和数据校验等,Struts2利用内建的拦截器完成 Struts2文档中对拦截器的解释为: 拦截器是动态拦截Action调用的对象; 提供了一种机制,使开发者可以定义一个特定的功能模块 这个模块可以在Action执行之前或者之后运行 也可以在一个Action执行之前阻止Action执行 同时也提供了一种可以提取Action中可重用的部分的方式。 拦截器是AOP 的一种实现,底层通过动态代理模式完成。,9/6/2019,华南师范大学软件学院,39,3、 Struts,Struts2.x拦截器,Struts2.x的拦截器,FilterDispatcher,ActionProxy,类型转换拦截器,文件上传拦截器等,Action,Result,初始化并调用execute方法,拦截并处理用户请求, 然后到Action的execute 方法处理用户请求,返回逻辑视图, 系统负责将逻辑视图 对应的资源显示给用户,9/6/2019,华南师范大学软件学院,40,3、 Struts,Struts2.x实例,Struts2.x实例(实现用户登录操作) 导入Struts2类库(以struts 2.1.6为例),将其WEB-INF/lib目录中的JAR拷贝到Project的WEB-INF/lib目录下),9/6/2019,华南师范大学软件学院,41,3、 Struts,Struts2.x实例,Struts2.x实例(实现用户登录操作) 在web.xml文件中配置FilterDispatcher, struts2.0 org.apache.struts2.dispatcher.FilterDispatcher struts2.0 /* ,9/6/2019,华南师范大学软件学院,42,3、 Struts,Struts2.x实例,Struts2.x实例(实现用户登录操作) 在开发Action,public class LoginAction private String name; private String password; public String execute() throws Exception if(.equals(“admin“) setter/getter ,实现业务逻辑处理,9/6/2019,华南师范大学软件学院,43,3、 Struts,Struts2.x实例,Struts2.x实例(实现用户登录操作) 配置struts.xml文件 在WEB-INF/classes 录下创建struts.xml文件, /login_success.jsp /login_error.jsp ,对Action类进行配置,编写相关JSP文件,3、Hibernate,ORM简介,对象关系映射(Object Relational Mapping,简称ORM) ORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单说,是将对象和对象之间的关系对应的到数据库表和表之间的关系。 持久化和持久化层 持久化,把内存中的数据保存到数据库(如关系数据库)或永久设备(如、硬盘)中。,持久化,数据库,存储设备,数据,对象,内存,装载,持久化原理,9/6/2019,华南师范大学软件学院,44,3、Hibernate,持久化和持久化层,持久化和持久化层 持久化层,专门负责持久化工作的逻辑层,由它统一与数据库层打交道,不难发现持久层封装了所有与数据库有关的操作和细节,9/6/2019,华南师范大学软件学院,45,3、Hibernate,实体域模型与关系数据模型,实体域模型与关系数据模型 实体域模型是对真实世界物质实体(如学生、老师、商品等)的抽象。 关系数据模型则是对关系型数据库中关系数据(如表、视图等)的一种静态描述。,9/6/2019,华南师范大学软件学院,46,City.java,City的数据表,实体域模型示面向对象的,而关系数据模型是面向关系型数据库的。他们之间的数据交换需要一个映射过程(对象-关系映射),3、Hibernate,ORM简介,如何进行对象关系数据库的匹配?,9/6/2019,华南师范大学软件学院,47,使用JDBC手工转换。 使用ORM(对象关系映射)框架来解决,主流的ORM框架有Hibernate、iBATIS、OJB等。,3、Hibernate,实体域模型与关系数据模型,实体域对象City与关系数据表City之间可以通过Hibernate的映射文件City.hbm.xml进行映射。,9/6/2019,华南师范大学软件学院,48,Class元素定义了一个持久化类 Name指定一个类名,table指定一个表名,Id元素定义了属性到数据库表主键字段的映射,City.hbm.xml,3、Hibernate,Hibernate简介,Hibernate简介,9/6/2019,华南师范大学软件学院,49,一个面向Java环境的对象/关系数据库映射工具; 一个轻量级的ORM框架; 用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去; 独立的持久层框架,不与具体服务器相关; 除提供对象关系映射,同时提供了数据查询和获取数据的方法。,Hibernate 的优缺点: 不需要编写的 SQL 语句 移植性好 实现了透明持久化 代码测试方便,Hibernate 使用范围: 针对单个对象进行修改编辑时,适用 对象之间有着很清晰的关系,适用 批量性添加、修改时,不适用 要求使用数据库中特定的功能时,不适用,3、Hibernate,Hibernate体系结构,Hibernate作为模型层/数据访问层。它通过配置文件(hibernate.cfg.xml或perties)和映射文件(*.hbm.xml)把java对象或持久化对象(Persistent Object,PO)映射到数据库中的数据表,然后通过操作PO,对数据库中的表进行各种操作。,9/6/2019,华南师范大学软件学院,50,应用程序,数据库,持久化对象,Hibernate配置: 如:hibernate.cfg.xml或perties,Hibernatel体系结构,Hibernate映射: 如:City.hbm.xml,3、Hibernate,Hibernate实例,9/6/2019,华南师范大学软件学院,51,Hibernate实例(实现用户登录操作),用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INFlib目录下,创建数据库表 REGISTEDUSERS,3、Hibernate,Hibernate实例,9/6/2019,华南师范大学软件学院,52,Hibernate实例(实现用户登录操作),用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INFlib目录下,创建数据库表 REGISTEDUSERS,创建创建持久化类 User,3、Hibernate,Hibernate实例,9/6/2019,华南师范大学软件学院,53,Hibernate实例(实现用户登录操作),用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INFlib目录下,创建数据库表 REGISTEDUSERS,创建创建持久化类 User,创建配置文件 - User.hbm.xml,3、Hibernate,Hibernate实例,9/6/2019,华南师范大学软件学院,54,Hibernate实例(实现用户登录操作),用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INFlib目录下,创建数据库表 REGISTEDUSERS,创建创建持久化类 User,创建配置文件 - User.hbm.xml,在Hibernate配置文件中增加映射内容 hibernate.cfg.xml ,3、Hibernate,Hibernate实例,9/6/2019,华南师范大学软件学院,55,Hibernate实例(实现用户登录操作),用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INFlib目录下,创建数据库表 REGISTEDUSERS,创建创建持久化类 User,创建配置文件 - User.hbm.xml,在Hibernate配置文件中增加映射内容 ,编写DAO接口和实现,3、Hibernate,Hibernate实例,9/6/2019,华南师范大学软件学院,56,Hibernate实例(实现用户登录操作),用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INFlib目录下,创建数据库表 REGISTEDUSERS,创建创建持久化类 User,创建配置文件 - User.hbm.xml,在Hibernate配置文件中增加映射内容 ,编写DAO接口和实现,3、Hibernate,Hibernate实例,9/6/2019,华南师范大学软件学院,57,Hibernate实例(实现用户登录操作),用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INFlib目录下,创建数据库表 REGISTEDUSERS,创建创建持久化类 User,创建配置文件 - User.hbm.xml,在Hibernate配置文件中增加映射内容 ,编写DAO接口和实现,在Struts的ActionBean中访问DAO接口,9/6/2019,华南师范大学软件学院,58,读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sesssion 创建事务Transation 持久化操作 提交事务 关闭Session 关闭SesstionFactory,3、Hibernate,Hibernate工作流程,Hibernate工作流程,3、Hibernate,Hibernate工作流程,9/6/2019,华南师范大学软件学院,59,Hibernate工作流程,启动hibernate,构建configuration实例,初 始化该实例中的所有变量,加载hibernate.cfg.xml 文件至该实例(内存),通过hibernate.cfg.xml文件中 的mapping节点配置加载*.hbm.xml 至该实例(内存),利用configuration实例创建 一个工厂类SessionFactory实例,SessionFactory类创建连接,SessionFactory实例创建事务接口,通过session接口提供的各种方法 操纵数据库,提交数据库事务,关闭session,3、Spring,Spring简介,9/6/2019,华南师范大学软件学院,60,Spring为企业应用的开发提供了一个轻量级的解决方案 目标: 使现有技术更加易用,推进编码最佳实践 内容: 依赖注入,AOP实现(声明式事务), DAO/ORM支持,Web集成等 框架的主要优势之一就是其分层架构 由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式。,Spring AOP,Spring ORM,Spring DAO,Spring web,Spring context,Spring Web MVC,Spring core,Spring框架的7个模块,3、Spring,Spring框架,9/6/2019,华南师范大学软件学院,61,Spring AOP,Spring ORM,Spring DAO,Spring web,Spring context,Spring Web MVC,Spring core,提供 Spring 框架的基本功能 主要组件是 BeanFactory,它是工厂模式的实现,一个配置文件 向 Spring 框架提供上下文信息,提供了有意义的异常层次结构 可用该结构来管理异常处理和不同数据库供应商抛出的错误消息,通过配置管理特性 集成了面向方面的编程功能,提供了 ORM 的对象关系工具,为基于 Web 的应用程序提供了上下文,全功能的构建Web应用程序的MVC实现,Spring框架,3、Spring,工厂模式&单例模式,9/6/2019,华南师范大学软件学院,62,Spring中大量使用两种设计模式: 工厂模式 单例模式 工厂模式 将调用者从被调用者的实现逻辑中分离出来 只关心被调用者必须满足的规则(接口),不必关心实例的具体实现过程。 Spring 容器是实例化和管理全部bean 的工厂, Spring 默认将所有的bean设置成单例模式 bean无须自己完成单态模式(有相同 id 的bean请求都将返回同一个共享实例) 单例模式可大大降低Java对象在创建和销毁时的系统开销。,(Spring倡导“面向接口编程“ ),3、Spring,Spring对单例与工厂模式的实现,9/6/2019,华南师范大学软件学院,63,使用Spring时,无须自己提供工厂类。因为Spring容器是最大的工厂。,3、Spring,Spring对单例与工厂模式的实现,Spring使用配置文件管理所有的bean,其配置文件中bean由Spring工厂负责生成和管理。,9/6/2019,华南师范大学软件学院,64,实例化Spring容器,通过Spring上下文获得chinese实例,wawa,你好 wawa,再见 wawa,Hello wawa,Bye,9/6/2019,华南师范大学软件学院,65,3、Spring,Spring对单例与工厂模式的实现,运行结果:,3、Spring,Spring对单例与工厂模式的实现,9/6/2019,华南师范大学软件学院,66,上面的例子中: 除主程序部分外,代码并未出现Spring特定的类和接口。 调用者代码(也就是测试用的主程序部分)仅仅面向Person接口编程,而无须知道实现类的具体名称。 同时,可以通过修改配置文件来切换底层的具体实现类。 由于工厂无须多个实例,因此工厂应该采用单态模式设计。其中Spring的上下文(即Spring工厂)被设计成单例模式。 Spring工厂模式,不仅提供了创建bean的功能,还提供对bean生命周期的管理。最重要的是还可管理bean与bean之间的依赖关系。,3、Spring,依赖注入,9/6/2019,华南师范大学软件学院,67,依赖注入 也叫控制反转; 一种解耦方式; Spring的核心机制; 使Spring的bean以配置文件组织在一起,而不是以硬编码的方式棉合在一起。 区分 在传统的程序设计过程 由调用者来创建被调用者的实例; 在依赖注入的模式下 创建被调用者的工作不再由调用者来完成,由Spring容器来完成,然后注入调用者。,所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。,3、Spring,理解依赖注入,9/6/2019,华南师范大学软件学院,68,理解依赖注入 以一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)为例:,3、Spring,为何要使用Spring,9/6/2019,华南师范大学软件学院,69,优势 降低组件之间的耦合度,实现软件各层之间的解耦。 可以使用容器提供的众多服务 事务管理服务、消息服务等等。 不再需要手工控制事务。 容器提供单例模式支持 开发人员不再需要自己编写实现代码 容器提供了AOP技术 易于实现如权限拦截、运行期监控等功能。 Spring对于主流的应用框架提供了集成支持 如:集成Hibernate、JPA、Struts等,便于应用的开发。,Controller,Service,DAO,9/6/2019,华南师范大学软件学院,70,3、Spring,Spring MVC框架结构,DispatcherServlet,HandlerMapping,HandlerAdapter,Handler,View (JSP/XML/PDF,.),2,3,4,ViewResolver,6,8,1,参考Spring 3.x企业应用开发实战,3、Spring,Spring MVC实例,9/6/2019,华南师范大学软件学院,71,登录模块实例 实例设计(如右图) 持久层 User类、UserDao类 业务层 UserService类 展现层 loginController类、login.jsp、main.jsp。,登录页面,欢迎页面,Web控制,用户名/密码错误,登录成功,页面流程图,实例框架结构,3、Spring,Spring MVC实例,9/6/2019,华南师范大学软件学院,72,持久层 设计,持久化类User对应数据库表REGISTEDUSERS表,3、Spring,Spring MVC实例,9/6/2019,华南师范大学软件学院,73,持久层 设计,根据用户名和密码获取匹配的用户数,根据用户名获取User对象,3、Spring,Spring MVC实例,9/6/2019,华南师范大学软件学院,74,Spring中装配DAO接口,3、Spring,Spring MVC实例,9/6/2019,华南师范大学软件学院,75,业务层,通过注解,将UserService标注为一个服务层的Bean,注解DAO层的Bean,根据用户名和密码查询是否存在用户,UserService调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个体租房合同
- 设备试制合同
- 小卡代言合同
- 餐厅转让合同
- 法人代表 合同
- 专利买卖合同
- 溧阳租赁合同
- 油漆施工合同
- 备战2026中考英语语法百题分类训练 专题03 动词时态100题(中考真题+中考模拟)(原卷版)
- 服务公司合同
- 汽车新媒体营销实务课程标准
- 农村留守儿童教育资源保障与关爱行动研究报告
- 2025标准合同模板制作承揽合同
- DB32-T 4383-2022 基层医疗卫生机构慢性病管理中心服务规范
- 员工手册模板(小型企业)
- 花城版三年级上册音乐教学计划
- 金融-多元金融行业:期货行业专题报告:行业逻辑趋完善乘风破浪终有时
- 水果合同协议书模板
- 甘肃卷2024年高考地理真题含解析
- 夜场员工合同协议书
- 2025抖音房产生态白皮书
评论
0/150
提交评论