SSH框架的底层机制及原理.docx

上传人:小飞机 文档编号:4925115 上传时间:2023-05-23 格式:DOCX 页数:20 大小:197.05KB
返回 下载 相关 举报
SSH框架的底层机制及原理.docx_第1页
第1页 / 共20页
SSH框架的底层机制及原理.docx_第2页
第2页 / 共20页
SSH框架的底层机制及原理.docx_第3页
第3页 / 共20页
SSH框架的底层机制及原理.docx_第4页
第4页 / 共20页
SSH框架的底层机制及原理.docx_第5页
第5页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《SSH框架的底层机制及原理.docx》由会员分享,可在线阅读,更多相关《SSH框架的底层机制及原理.docx(20页珍藏版)》请在三一办公上搜索。

1、Strutsl的工作原理1、初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml 中配置成自动启动的Servlet,在启动时总控制器会读取配置文件 (struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。(面向对象思想)2、发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用 HTTP协议传给web服务器。3、form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到 对应的form对象中的成员变量中。4、派发请求:控制器根据配置信息对象ActionConfig

2、将请求派发到具体的 Action,对应的formBean 一并传给这个Action中的excute ()方法。5、处理业务:Action 一般只包含一个excute()方法,它负责执行相应的业务逻 辑(调用其它的业务模块)完毕后返回一个ActionForward对象。服务器通过 ActionForward对象进行转发工作。6、返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。7、查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的 资源对象,一般情况下为jsp页面。8、响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。ssh框架启动流程系

3、统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。其中使用Struts作 为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate框 架对持久层提供支持,业务层用Spring支持。具体做法是:用面向对象的分析方法根据需 求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出 Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的 转换和访问,最后由Spring完成业务逻辑。系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责传送请求 (Request)

4、和接收响应(Response),然后 Struts 根据配置文件(struts-config.xml)将 ActionServlet 接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的Spring IoC容 器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业 务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持 久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并 返回处理结果。采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻 辑

5、层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化 也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利 于团队成员并行工作,大大提高了开发效率。Strutsl与struts2有什么不同1. Action 类Stutsl要求Action类继承一个抽象基类。Strutsl的一个普通问题是使用抽象 类编程而不是接口。Struts2 Action类可以实现一个Action接口,也可以实现 其它接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基 类去实现常用的接口。Action接口不是必须的,任何有execute

6、标识的POJO 对象都可以用作Struts2的Action对象。2. 线程模式:Strutsl Action是单例模式并且必须是线程安全的,因为仅有 Action的一个实例来处理所有的请求。单例策略限制了 Strutsl Action能作的 事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。3. Servlet 依赖:Strutsl Action 依赖于 Servlet API,因为当一个 Action 被 调用时,HttpServletResquest 和 HttpServletRespon

7、se 被传递给 execute 方法, 即Action依赖了容器,测试变得非常麻烦。Struts2 Action不依赖于容器,允 许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始 的request和response。但是,其它的元素减少或者消除了直接访问 HttpServletRequset 和 HttpServletResponse 的必要性。4.捕获输入:Strutsl 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其 它JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean

8、 可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述已经存 在的JavaBean,仍然会导致有冗余的javabean。Struts2直接使用Action属性 作为输入属性,消除了对第二输入对象的需求。Action属性能够通过web页面 上的taglibs访问。Struts2也支持ActionForm模式。(Struts2用普通的POJO 来接收数据)5. 表达式语言:Struts1整合了 JSTL,但对集合和索引属性的支持很弱。Struts2 可以是使用JSTL,但是也支持一个更加强大和灵活的表达式语言“Object Graph Notation Language”(OG

9、NL对象图导航语言).6. 绑定值到页面(view) : Struts 1使用标准JSP机制把对象绑定到页面中来 访问,Struts1要传递值的时候必须往request里放、往session里放,然后再 传递到jsp里面,el表达式得到。Struts2使用“ValueStack”技术,使taglib 能够访问值而不需要把你的页面和对象绑定起来。ValueStack策略允许通过一 系列名称相同但类型不同的属性重用页面。值栈技术非常著名。不需要request、 不需要session,直接从Action中取值。7. 类型转换:Struts1 ActionForm属性通常都是String类型。Stru

10、ts 1使用 Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不 可配置的。Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。8. 校验:Struts1支持在ActionForm的validate方法中手动校验,或者通过 Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校 验子对象Struts2支持通过validate方法和Xwork校验框架来进行校验Xwork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。9. Action执行的控制:Struts1支持每一个模块有单独的Re

11、questProcessors(生 命周期),但是模块中的所有Action必须共享相同的生命周期。(服务器重启 时,Action生命周期结束,即生命周期无法控制)Struts2支持通过拦截器堆 栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根 据需要和不同的Action 一起使用。(可以控制Action的生命周期)简单的说:struts1和struts2的核心原理不同:struts1.X 是基于 servlet 的struts2是xwork的变体:他的核心是filterstruts1是单例模式开发,struts2是多例模式。struts1的单例模式好

12、处是节省内存,缺点是并发性查,非同步。struts2好处是线程安全是同步的每次使用开辟新的内存空间,缺点是占用资源 多。Modell的原理:Rw A L F lUMr ActionSyslemResponseStrutsl的工作原理:Servlel(Control ter)-nsbntsEEaBrowseiR 够 pon 卵Web Cmialrwr(View)它引入了控制器这个概念,控制器一般由servlet来担任,客户端的请求不再 直接送给一个处理业务逻辑的JSP页面,而是送给这个控制器,再由控制器根据 具体的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。因此,这个 servlet控

13、制器为应用程序提供了一个进行前-后端处理的中枢。一方面为输入 数据的验证、身份认证、日志及实现国际化编程提供了一个合适的切入点;另一 方面也提供了将业务逻辑从JSP文件剥离的可能。业务逻辑从JSP页面分离后, JSP文件蜕变成一个单纯完成显示任务的东西,这就是常说的View。而独立出来 的事务逻辑变成人们常说的Model,再加上控制器Control本身,就构成了 MVC 模式。实践证明,MVC模式为大型程序的开发及维护提供了巨大的便利。其实,MVC开始并不是为Web应用程序提出的模式,传统的MVC要求M将其状态 变化通报给V,但由于Web浏览器工作在典型的拉模式而非推模式,很难做到这 一点。因

14、此有些人又将用于Web应用的MVC称之为MVC2。正如上面所提到的MVC 是一种模式,当然可以有各种不同的具体实现,包括您自己就可以实现一个体现 MVC思想的程序框架,Struts就是一种具体实现MVC2的程序框架。它的大致结 构如图三所示:I I I taclibI1 Act ionServ 1 e 圭例吐|1 Act iorLForm (F1 t (控制器)模型的鼓wIIII图三图三基本勾勒出了一个基于Struts的应用程序的结构,从左到右,分别是其表 示层(view)、控制层(controller)、和模型层(Model)。其表示层使用Struts 标签库构建。来自客户的所有需要通过框架

15、的请求统一由叫ActionServlet的 servlet接收(ActionServlet Struts已经为我们写好了,只要您应用没有什么 特别的要求,它基本上都能满足您的要求),根据接收的请求参数和Struts配 置(struts-config.xml)中 ActionMapping,将请求送给合适的 Action 去处理, 解决由谁做的问题,它们共同构成Struts的控制器。Action则是Struts应用 中真正干活的组件,开发人员一般都要在这里耗费大量的时间,它解决的是做什 么的问题,它通过调用需要的业务组件(模型)来完成应用的业务,业务组件解 决的是如何做的问题,并将执行的结果返回

16、一个代表所需的描绘响应的JSP(或 Action)的ActionForward对象给ActionServlet以将响应呈现给客户。过程如图四所示:图四这里要特别说明一下的是:就是Action这个类,上面已经说到了它是Struts 中真正干活的地方,也是值得我们高度关注的地方。可是,关于它到底是属于控 制层还是属于模型层,存在两种不同的意见,一种认为它属于模型层,如:JSP Web编程指南;另一些则认为它属于控制层如:Programming Jakarta Struts、 Mastering Jakarta Struts和Struts Kick Start等认为它是控制器的 一部分,还有其他一些

17、书如Struts in Action也建议要避免将业务逻辑放在 Action类中,也就是说,图3中Action后的括号中的内容应该从中移出,但实 际中确有一些系统将比较简单的且不打算重用的业务逻辑放在Action中,所以 在图中还是这样表示。显然,将业务对象从Action分离出来后有利于它的重用, 同时也增强了应用程序的健壮性和设计的灵活性。因此,它实际上可以看作是 Controller与Model的适配器,如果硬要把它归于那一部分,笔者更倾向于后 一种看法,即它是Controller的一部分,换句话说,它不应该包含过多的业务 逻辑,而应该只是简单地收集业务方法所需要的数据并传递给业务对象。实

18、际上, 它的主要职责是:校验前提条件或者声明调用需要的业务逻辑方法检测或处理其他错误路由控制到相关视图上面这样简单的描述,初学者可能会感到有些难以接受,下面举个比较具体的例 子来进一步帮助我们理解。如:假设,我们做的是个电子商务程序,现在程序要 完成的操作任务是提交定单并返回定单号给客户,这就是关于做什么的问题,应 该由Action类完成,但具体怎么获得数据库连接,插入定单数据到数据库表中, 又怎么从数据库表中取得这个定单号(一般是自增数据列的数据),这一系列复 杂的问题,这都是解决怎么做的问题,则应该由一个(假设名为orderBo)业务 对象即Model来完成。orderBo可能用一个返回整

19、型值的名为submitOrder的方 法来做这件事,Action则是先校验定单数据是否正确,以免常说的垃圾进垃圾 出;如果正确则简单地调用orderBo的submitOrder方法来得到定单号;它还要 处理在调用过程中可能出现任何错误;最后根据不同的情况返回不同的结果给客 户。二、为什么要使用Struts框架既然本文的开始就说了,自己可以建这种框架,为什么要使用Struts呢?我想 下面列举的这些理由是显而易见的:首先,它是建立在MVC这种公认的好的模式 上的,Struts在M、V和C上都有涉及,但它主要是提供一个好的控制器和一套 定制的标签库上,也就是说它的着力点在C和V上,因此,它天生就有

20、MVC所带 来的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸 缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等 等;其次,它是个开源项目得到了包括它的发明者Craig R.McClanahan在内的 一些程序大师和高手持续而细心的呵护,并且经受了实战的检验,使其功能越来 越强大,体系也日臻完善;最后,是它对其他技术和框架显示出很好的融合性。 如,现在,它已经与tiles融为一体,可以展望,它很快就会与JSF等融会在一 起。当然,和其他任何技术一样,它也不是十全十美的,如:它对类和一些属性、 参数的命名显得有些随意,给使用带来一些不便;还有如Actio

21、n类execute方 法的只能接收一个ActionForm参数等。但瑕不掩瑜,这些没有影响它被广泛使 用为什么使用Struts2 ?新版本的Struts2.0是struts的action架构和webwork的融合体.依照 Struts2.0.1的发布公告,一些关键特性如下: 设计简单:使用抽象类而不是接口是Strutsl的一个设计上的问题,这 已经在Struts2中得到了解决.在Struts2中绝大多数类都是基于接口的, 并且它的绝大多数核心接口都是独立于HTTP的.Struts2的Action类是 独立于框架的,可视为单纯的POJO.框架的组件都设法保持松耦合 单纯的Action : Act

22、ion都是单纯的POJO.任何含有execute()方法的 java类都可以当作Action类来使用.甚至我们始终都不需要实现接口.反转控制会在开发Action类的时候得到介绍过,这能让Action中立于底 层框架. 不再使用ActionForm : ActionForm特性不再在Structs2中出现.简单 的JavaBean即可对Action直接传递参数.不再需要全部使用String类 型的参数. 简单的测试:Struts2的Action是独立于HTTP并且中立于框架的.这 使得Struts2的程序可以很容易的在没有模拟对象的情况下测试. 巧妙的默认值:大多数配置元素都设有一个根据需要设定

23、的默认值. 甚至根据需要基于XML的默认配置文件都可以进行重写. 改良的结果集:不像Struts1中的ActionForward,Struts2的结果集 灵活的提供了多种类型的输出,事实上这促进了响应的准备工作. 更好的标签特性:Struts2可以添加样式表驱动标记,这使我们创建相 同的页面仅用更少的代码.Struts2的标签更有效而且是面向结果的.Struts2的标签标记可以通过修改基础样式表来修改.个别的标签标 记可以通过编辑FreeMarker的模板来修改.JSP和FreeMarker都完全得 到了支持. 引入注释:在Struts2程序中,除了 XML和Java properties配置

24、文件 夕卜,Java 5的注释也可以作为一种选择.注释使得XML的使用降至最低. 有状态的Checkbox : Struts2中的checkbox不需要对false值进行特 殊处理. 快速开始:很多改变无需重启web容器即可实现. 自定义控制器:Struts1可以自定义每一个模块的请求处理器,如果需 要,Struts2可以自定义每一个Action的请求处理. 易与Spring整合:Struts2的Action与Spring是友好的,只需添加 Spring 的 bean 轻巧的插件:Struts2可以通过添加一个Jar文件来进行扩展,不再需 要手动配置! 支持AJAX : AJAX主题对提升程序

25、交互有着重要的意义.Struts2框架提 供了一套标签来AJAX化你的程序甚至DOJO.AJAX特性包括:1. AJAX客户端验证.2. 支持远程表单提交.(同样适用于submit标签)3. 先进的div模板提供动态重载部份HTML4. 先进的模板提供远程加载和计算Javascript的能力.5. AJAX-only选项卡面板的实现6. 丰富的发布/订阅事件模型7. 自动交互完善标签深入全面阐释Struts 2的方方面面一、Struts 概述Struts是一个用来开发Model 2应用程序的框架。这个框架可以提高开发 工作的速度,因为它提供的下面这些功能解决了 Web应用程序开发过程中的一 些

26、常见问题:对页面导航活动进行管理;对来自用户的输入数据进行合法性验证; 统一的布局;可扩展性;国际化和本地化;支持Ajax技术。因为Struts是一个Model 2框架,所以在使用Struts时还应该遵守以下 几条不成文的规定。不要在JSP页面里嵌入Java代码,应该把所有的业务逻辑包含在一些被 称为“动作类”(action class)的Java类里。在JSP页面里使用Expression Language ( OGNL)去访问有关的模型对 象。尽量避免编写自定义标签(因为自定义标签的代码比较难以编写)。二、升级到 Struts 2你也许用过Struts 1编程,这里提供了一个关于Strut

27、s 2新功能的简要 介绍。在Struts 1里需要使用一个像ActionServiet类这样的东西作为servlet 控制器;Struct 2使用了一个过滤器来完成同样的任务。在Struts 2里没有任何动作表单。在Struts 1里,每个HTML表单都 对应着一个ActionForm实例,你可以从动作类访问这个动作表单,并用它 来填充数据传输对象。在Struts 2里,HTML表单将被直接映射为一个 POJO,而不再需要你创建一个数据传输对象,因为没有动作表单,维护工 作变得简单容易了,你不再需要与那么多的类打交道。问题来了 :没有了动作表单,怎样才能在Struts 2里通过编程对用户输 入

28、进行合法性验证呢?答案是把验证逻辑编写在动作类里。 Struts 1通过几个标签库提供了一批定制标签供程序员在JSP页面里使 用,其中最重要的是HTML标签库、Bean标签库和Logic标签库。Servlet 2.4 里的 JSTL 和 EL ( Expression Language,表达式语言) 经常被用来代替Bean和Logic标签库。Struts 2为程序员准备了一个 应有尽有的标签库,你不再需要JSTL,但在某些场合你可能仍需要EL。在Struts 1里,你还需要用到一些Struts配置文件,其中最主要的是 存放在各Web应用程序里的WEB-INF子目录里的struts-config

29、.xml(默认文件名)。在Struts 2里,你仍需要用到多个配置文件,但必须 把它们存放在WEB-INF/classes子目录或它的某个下级子目录里。要想使用Struts 2,你的系统里必须有Java 5和Servlet 2.4 (或 更高版本)。之所以需要有Java 5,是因为Java 5里新增加的注解在 Struts 2里扮演着重要角色。我们撰写本书时,Java 6已经发布,Java 7也指日可待,你很可能已经在使用Java 5或Java 6 了。 在 Struts 1 里,动作类必须扩展自 org.apache.struts.action.Action 类。在Struts 2里,任何一

30、个POJO都可以是一个动作类。不过,我 们将在本书第3章说明,在Struts 2里最好对 ActionSupport 类进行扩 展。在此基础上,可用一个动作类来完成相关的动作。 Struts 2在JSP页面里使用OGNL来显示各种对象模型,而不再是JSP EL 和 JSTL。原本是Struts 1组件之一的Tiles现在已经发展为一个独立的ApacheHTTP没有“类型”的概念,在HTTP请求里发送的值都是字符串。在把表单字段 映射到非String类型的动作属性时,Struts会自动对这些值进行必要的转换。 这一章将解释Struts如何完成这类转换,你还将学到如何为更加复杂的情spring工作

31、机制及为什么要用?1. springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系 统的其他模块负责对请求进行真正的处理工作。2. DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的 Controller.3. DispatcherServlet 请求提交到目标 Controller4. Controller进行业务逻辑处理后,会返回一个ModelAndView5. Dispathcher查询一个或多个ViewResolver视图解析器,找到 ModelAndView对象指定的视图对象6. 视图对象负责渲染返回给客户端。为

32、什么用:AOP让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们 插入到应用程序代码中。使用AOP后,公共服务(比如日志、持久性、事务等) 就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂 性。IOC允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的 协作对象。正如单词倒置所表明的,IOC就像反过来的JNDI。没有使用一堆抽 象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction), 每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)oSpring即使一个AOP框架,也是一

33、 IOC容器。Spring最好的地方是它有 助于您替换对象。有了 Spring,只要用JavaBean属性和配置文件加入依赖性(协 作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。Spring框架是一个分层架构,由7个定义良好的模块组成。Spring模块 构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式,如图1 所示。组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一 个或多个模块联合实现。每个模块的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory

34、使用控制反转(IOC)模式将 应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下 文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、 校验和调度功能。Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程 功能集成到了 Spring框架中。所以,可以很容易地使Spring框架管理的任何 对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事 务管理服务。通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务 管

35、理集成到应用程序中。Spring DAO: JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构 来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错 误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。 SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。Spring ORM: Spring框架插入了若干个ORM框架,从而提供了 ORM的对 象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从 Spring的通用事务和DAO异常层次结构。Spring Web模块:Web上下文模块建立在应用程序上

36、下文模块之上,为基 于Web的应用程序提供了上下文。所以,Spring框架支持与Jakarta Struts 的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工 作。Spring MVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实 现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术, 其中包括 JSP、Velocity、Tiles、iText 和 POI。Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不 受管理的环境。Spring的核心要点是:支持不绑定到特定J2EE服务的可重用 业务和数据访问对象。毫无疑问,这样

37、的对象可以在不同J2EE环境(Web或 EJB)、独立应用程序、测试环境之间重用。共2页:1 2内容导航第1页:Hibernate工作原理及用的理由(1)第2页:Hibernate工作原 理及用的理由(2)IOC 和 AOP控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描 述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述 哪一个组件需要哪一项服务。容器(在Spring框架中是IOC容器)负责将这 些联系在一起。在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将它们连 接在一起,决定什么时间调用方法。下表列出了 IOC的一个实现模式。Spring框架

38、的IOC容器采用类型2和类型3实现。面向方面的编程即AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分 界线的行为(例如日志和事务管理)进行模块化。AOP的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块 中。AOP和IOC是补充性的技术,它们都运用模块化方式解决企业应用程序开 发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在 所有方法和Java类中才能实现日志功能。在AOP方式中,可以反过来将日志服 务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是 Java类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用Sprin

39、gAOP编写的应用程序代码是松散耦合的。AOP的功能完全集成到了 Spring事务管理、日志和其他各种特性的上下 文中。IOC容器Spring设计的核心是org.springframework.beans包,它的设计目标是 与JavaBean组件一起使用。这个包通常不是由用户直接使用,而是由服务器将 其用作其他多数功能的底层中介。下一个最高级抽象是BeanFactory接口,它 是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory也可以管 理对象之间的关系。BeanFactory支持两个对象模型。单态模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行 检索Sing

40、leton是默认的也是最常用的对象模型。对于无状态服务对象很理想。原型模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对 象时,原型模型最适合。bean工厂的概念是Spring作为IOC容器的基础。IOC将处理事情的责任 从应用程序代码转移到框架。正如我将在下一个示例中演示的那样,Spring框 架使用JavaBean属性和配置数据来指出必须设置的依赖关系。BeanFactory 接口因为 org.springframework.beans.factory.BeanFactory 是 -个简单接口, 所以可以针对各种底层存储方法实现。最常用的BeanFactory定义是 XmlBea

41、nFactory,它根据XML文件中的定义装入bean,如清单1所示。清单 1. XmlBeanFactoryBeanFactory factory = newXMLBeanFactory(newFileInputSteam(mybean.xml);在XML文件中定义的Bean是被消极加载的,这意味在需要bean之前, bean本身不会被初始化。要从BeanFactory检索bean,只需调用getBean()方 法,传入将要检索的bean的名称即可,如清单2所示。清单 2. getBean()MyBean mybean = (MyBean) factory.getBean(mybean);每

42、个bean的定义都可以是POJO (用类名和JavaBean初始化属性定义) 或FactoryBean0FactoryBean接口为使用Spring框架构建的应用程序添加了 一个间接的级别。IOC示例理解控制反转最简单的方式就是看它的实际应用。在对由三部分组成的 Spring系列 的第1部分进行总结时,我使用了一个示例,演示了如何通过 Spring IOC容器注入应用程序的依赖关系(而不是将它们构建进来)。我用开启在线信用帐户的用例作为起点。对于该实现,开启信用帐户要求 用户与以下服务进行交互:信用级别评定服务,查询用户的信用历史信息。远程信息链接服务,插入客户信息,将客户信息与信用卡和银行信

43、息连接 起来,以进行自动借记(如果需要的话)。电子邮件服务,向用户发送有关信用卡状态的电子邮件。三个接口对于这个示例,我假设服务已经存在,理想的情况是用松散耦合的方式把 它们集成在一起。以下清单显示了三个服务的应用程序接口。清单 3. CreditRatingInterfacePublic interface CreditRatingInterfacePublic Boolean getUserCreditHistoryInformation(ICustomer iCustomer);清单3所示的信用级别评定接口提供了信用历史信息。它需要一个包含客 户信息的Customer对象。该接口的实现是

44、由CreditRating类提供的。清单 4. CreditLinkingInterfacepublic interface CreditLinkingInterfacepublic String getUrl(); public void setUrl(String url);publicvoid linkCreditBankAccount() throws Exception ;信用链接接口将信用历史信息与银行信息(如果需要的话)连接在一起, 并插入用户的信用卡信息。信用链接接口是一个远程服务,它的查询是通过 getUrl()方法进行的。URL由Spring框架的bean配置机制设置,我稍

45、后会 讨论它。该接口的实现是由CreditLinking类提供的。清单 5. Emaillnterfacepublic interface Emaillnterfacepublic void sendEmail(ICustomer iCustomer);publicStringgetFromEmail(); public void setFromEmail(String fromEmail) ;publicString getPassword(); public voidsetPassword(Stringpassword) ;public String getSmtpHost() ; pub

46、lic voidsetSmtpHost(StringsmtpHost); public String getUserId() ; publicvoid setUserId(StringuserId);Hibernate工作原理及为什么要用?原理:1. 读取并解析配置文件2. 读取并解析映射信息,创建SessionFactory3. 打开 Sesssion4. 创建事务Transation5. 持久化操作6. 提交事务7. 关闭 Session8. 关闭 SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复 性代码。2. Hibern

47、ate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。 它支持各种关系数据库,从一对一到多对多的各种复杂关系。2. Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2. Hibernate3提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据 的操作时,对象才存在与内存中,

48、就实现了延迟加载,他节省了服务器的内存开 销,从而提高了服务器的性能。3. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行 操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的 many-to-one、 one-to-many、 many-to-many、4. 说下Hibernate的缓存机制1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a)应用及缓存b)分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一 数据被系统频繁使用、非关键数据c)第三方缓存的实现5. Hibernate的查询方式Sql、 Criteria,object comptosition

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号