[计算机软件及应用]Spring自动代理+SHH.ppt_第1页
[计算机软件及应用]Spring自动代理+SHH.ppt_第2页
[计算机软件及应用]Spring自动代理+SHH.ppt_第3页
[计算机软件及应用]Spring自动代理+SHH.ppt_第4页
[计算机软件及应用]Spring自动代理+SHH.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章,Spring autoProxing(自动代理),上节回顾,本章目标,使用spring的动态代理 Spring和struts2整合,什么是spring的自动代理,因为如果应用程序规模大时,如果要提供的Advice的目标对象很多,则一个一个为它们建立代理对象会是件麻烦事。 为此,Spring为一些情况提供自动代理。 自动代理可以让你不用为每一个目标对象手动定义代理对象 使用自动代理,你可以透过Bean名称或者是Pointcut的比对,自动为符合比对条件的目标对象建立代理对象。,问题的起源,一个应用,在applicationContext.xml文件中, com.dn.lesson4.Some dia ,问题,如果我们有两个类实现同一个接口,这时需要两个Proxy对象,applicationContext.xml文件配置, com.dn.lesson.IService logAdvice com.dn.lesson.IService logAdvice ,测试文件test.java,ApplicationContext context=new ClassPathXmlApplicationContext(“applicationContext.xml“); IService is=(IService)context.getBean(“ProxyFactoryBean“); is.execute(); IService is1=(IService)context.getBean(“ProxyFactoryBean1“); is1.execute();,问题,上面所使用的代理方式是ProxyFactoryBean模式 优点是采用代理的方式为每个需要的Bean在需要的时候注入切面程序 缺点 每个代理Bean只能为一个B ean程序服务 如果Bean很多的话,这里就需要多个代理类,解决办法,使用Spring中的动态代理 使用org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator类 自动代理可以让你不用为每一个目标对象手动定义代理对象 使用自动代理,你可以透过Bean名称或者是Pointcut的比对,自动为符合比对条件的目标对象建立代理对象。,在配置文件中注入该Bean, *Action logAdvice 不需要id属性,因为在调用时,不需要指定代理类,而是由系统直接匹配 有两个属性 beanNames : 指的是需要匹配的bean,可采用通配符 可以使用 指定需要匹配的Bean interceptorNames 已注入的 Advice实现类 或 Advisor 使用时:直接以Bean id获取Bean 调用即可,比较方便。 IService is=(IService)context.getBean(“loginAction“); is.execute();,自动代理的优点,可以为多个bean应用同一个切面 可以为多个bean应用多个切面 在获取时,可以不获取代理类,可直接使用Bean 在获取时,系统自动检测该bean是否符合自动代理类的规划,如果符合,自动应用。,动态代理之DefaultAdvisorAutoProxyCreator方式,org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator 需要与PointcutAdvisor一起使用 可以是NameMatchMethodPointcutAdvisor 也可以是RegexpMethodPointcutAdvisor 步骤 注入DefaultAdvisorAutoProxyCreator 注入相应的PointcutAdvisor 测试文件中不需要调用代理类,在调用相应bean时,系统自动匹配。,配置文件配置,pointcutAdvisror的配置 同以前,但可以不指定id execute DefaultAdvisorAutoProxyCreator的注入 ,概念辨析,技术、组件、框架和系统,Java流行框架,大名鼎鼎的SSH,struts,Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。 Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action 也为V(View)提供了一系列定制标签(Custom Tag)。 但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。,Spring,Spring是一个开源轻型容器框架(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;,Hibernate,它是连接 Java 应用程序和关系数据库的中间件。 它对 JDBC API 进行了封装,负责Java对象的持久化。 在分层的软件架构中它位于持久化层,封装了所有数据访问细节,使业务罗基层可以专注于实现业务逻辑。 它是一种 ORM(Object-Relation Mapping 对象-关系映射)工具,能够建立面向对象的域模型和关系模型的映射。,回顾:三层结构,三层结构指的是? 和.NET中三层结构的对比,三层结构在Java中的应用,分层原则 各层职责明确 上一层调下一层,Spring的Ioc控制的核心,Struts项目 发送请求 http:/localhost:8081/ssh/login.action 增加业务层的struts项目 IService IServiceImpl 在action中增加对IServiceImpl的使用 出现问题: ISerivceImpl与Action耦合度太强,不易于系统维护 解决办法:由Spring来进行管理,整合点:,让Spring管理 Struts的Action对象,步骤,将实例化语句去除,加上get/set方法 在spring的配置文件中注入action(可以使用属性注入) 在spring的配置文件中注入impl业务实现类 但此时会出现问题?空指针异常?,原因是:,因为我们在spring中由Ioc实例化action,但请求却是发给struts,struts如何去spring中去取action的实例化? Struts的处理请求的方式: 请求 - Struts/RequestProcessor - 控制器 - ,解决办法,1、加入strut2-spring-plugin*.jar文件 此文件为strut2整合spring的外在jar文件,解决的办法:,2.在web.xml文件中增加下列代码 contextConfigLocation /WEB-INF/classes/applicationContext.xml org.springframework.web.context.ContextLoaderListener 功能:即告诉strut2,实例化action的工作不由struts2框架来做了,而是由spring的配置文件中注入了。,解决的办法:,3。Struts.xml文件 /success.jsp /login2.jsp /login2.jsp ,解决的办法:,applicationContext.xml文件 ,注意:bean中的id应该与 struts.xml文件中action的 class属生匹配,建议,applicationContext.xml文件 ,再次发送请求,http:/localhost:8081/ssh/l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论