《Spring简介》PPT课件.ppt

上传人:博****1 文档编号:569785906 上传时间:2024-07-31 格式:PPT 页数:34 大小:421.14KB
返回 下载 相关 举报
《Spring简介》PPT课件.ppt_第1页
第1页 / 共34页
《Spring简介》PPT课件.ppt_第2页
第2页 / 共34页
《Spring简介》PPT课件.ppt_第3页
第3页 / 共34页
《Spring简介》PPT课件.ppt_第4页
第4页 / 共34页
《Spring简介》PPT课件.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《《Spring简介》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Spring简介》PPT课件.ppt(34页珍藏版)》请在金锄头文库上搜索。

1、第第 三三 章章 Spring AOP 什么是AOPq为了理解AOP,请思考如下需求:q角色:上帝,人(每个人都有大脑)q现在上帝希望知道每个人的想法,请用面向对象的方法解决2设计登场角色q上帝,只有一个public class God /* * 上帝的读心术 * param mind 某个人的思想 */public void read(String mind) log.debug(上帝知道了,某个人正在想:“ + mind + ”);3设计登场角色q人,好几十亿public class Person private Brain brain;public void look(String th

2、ing) if(thing.equals(美女)log.debug(this.brain.thinking(上帝真伟大,造出来这么漂亮的人); else if (thing.equals(丑八怪) log.debug(this.brain.thinking(上帝真XX.); else log.debug(this.brain.thinking();4设计登场角色q大脑,重要器官,每个人有自己的大脑public class Brain public String thinking(String thing)if(thing = null | thing.trim().length() = 0)

3、return (发呆中.); else return (正在思考“ + thing + ”的问题);5解决问题q为了要知道人们的思想,上帝决定用换脑的手段来达到目的q由于人在出生时并不知道自己的大脑是怎么来的(由Spring注入的),因此,可以在他出生时安装另一个大脑6换脑的两种方法q用继承方式q用接口方式7使用继承的方式public class BrainExt extends Brain private God god;public void setGod(God god) this.god = god;Overridepublic String thinking(String thing

4、) / 告诉上帝god.read(thing);return super.think(thing);8使用接口的方式q实际上,只要能“思考”,人类不在意究竟给他的脑袋里装一个大脑还是一个石头(假如石头能思考的话)q“大脑”只是一种能够思考的象征q因此,重新审视我们的设计,将大脑变成接口,变成一个抽象的概念9使用接口的方式public class BrainProxy implements Brainprivate God god;private Brain brainNatural;public void setBrainNatural(Brain brainNatural) this.bra

5、inNatural = brainNatural;public String thinking(String thing) god.read(thing);return brainNatural.thinking(thing);public void setGod(God god) this.god = god;10优先选择接口而非继承q当需要进行动态代理时,接口比继承更容易实现q接口具有更好的扩展性11问题q上帝不想创建过多的代理对象,仅仅希望实现具体操作12使用Spring提供的办法q刚才的例子里,无论是使用继承还是接口进行换脑,在设计模式里都称为代理模式q请大家区分代理与被代理对象分别是

6、谁qSpring为代理提供了更方便的控制13正常操作正常操作Spring中AOPqAOP即面向切面的编程q在AOP的概念中,将刚才的场景中的角色划分的更为细致切面里执行切面里执行附加操作附加操作Pointcut正常操作之前正常操作之前正常操作之前正常操作之前正常操作之后正常操作之后正常操作之后正常操作之后14q上例中的上帝,称之为Advice(被通知对象),它知道该做什么q关于上帝何时在什么时间、地点被通知,称之为Pointcut(切入点)q对于真实的大脑,称之为Target(目标对象)q对于假的大脑,不管是真实大脑的子类还是它们实现了共同的接口,都称之为Proxy(代理对象)15Spring

7、中的Advice和Pointcutq常见的Advice和Pointcut的类型qMethodBeforeAdviceqAfterReturningAdviceqThrowsAdviceqMethodInterceptor16配置文件相应的改动god 17public class God implements MethodBeforeAdvicepublic void read(String mind) System.out.println(上帝知道了,某个人正在想:“ + mind + ”);public void before(Method method, Object args, Obje

8、ct target)throws Throwable read(args0.toString();在方法执行前通知在方法执行前通知告知你执行的方法、方法的参数告知你执行的方法、方法的参数s还有目标(被代理的)对象还有目标(被代理的)对象18注意事项qAdvice仅用于通知,如果需要拦截方法的调用需要使用Interceptorq无论是MethodBeforeAdvice、AfterReturningAdvice、ThrowsAdvice它们都不能改变方法的执行(本身的行为)q而Interceptor具有改变方法行为的能力19MethodInterceptor需要实现的方法q注意,一旦实现了Met

9、hodInterceptor,那些Advice(通知)就不管用了public Object invoke(MethodInvocation mi) throws Throwable if(mi.getArguments()0.toString().indexOf(XX) 0)return (凡人,别做无谓的思考了.);/throw new RuntimeException(现在大脑一片混乱,无法思考); else return mi.proceed();改变方法的行为,改变方法的行为,只在一念之间只在一念之间Proceed让方法让方法继续执行继续执行20讨论q使用Spring提供的ProxyF

10、actoryBean提供代理的好处q不必自己创建整个代理对象了,代理对象由ProxyFactoryBean产生,程序员只需要关注实现具体功能q使用ProxyFactoryBean可以创建几乎任何对象的代理,减少了程序中代理类的数量21问题q但是现在上帝很郁闷,现在它必须戴上一大堆身份,弄得身上脏兮兮的q现在的结果是使得上帝依赖于Spring提供的接口,上帝离了Spring就活不了了q怎么办22Spring2.0里的AOPq使用AspectJ23使用AspectJ达到相同的效果q在AspectJ的表达中上帝是一个POJO,不需要实现特定的接口就可进行AOP操作q这个例子里,上帝在AspectJ中

11、被成为Aspect(即切面),它的目的是执行正常逻辑之外的附加操作q与之前的Spring1.x中的AOP相比,可以把Advisor(通知)看作是知道了切入地点的Aspect24使用AspectAOP的步骤1.将BeanFactory换成ApplicationContextqApplicationContext是BeanFactory的子接口qApplicationContext提供了更多的功能q如果将BeanFactory比作一个小作坊,那么ApplicationContext就是一个生产车间25使用AspectAOP的步骤2.使用spring2.0中提供的schema样式的配置文件26God

12、类的变化public class God private static Log log = LogFactory.getLog(God.class);/* * 上帝的读心术上帝的读心术 * param mind 某个人的思想某个人的思想 */public void read(String thing) log.debug(上帝知道了,某个人正在想:上帝知道了,某个人正在想:“ + thing + ”);God不需要再实现不需要再实现那些那些Advice接口接口27配置文件的变化 28它们如何对应public class God public void read(String thing) lo

13、g.debug(上帝知道了,某个人正在想:上帝知道了,某个人正在想:“ + thing + ”); package org.yihang.aop;public interface Brain public String thinking(String thing);29其他类型的JoinPointqqqq - 表示已经定义好连接点的切面30Pointcut表达式qexecution表示执行qpublic表示公共方法q第一个*表示任意返回类型q第二个*表示任意方法名q(.)表示任意参数execution(public * *(.) 31更多的例子execution(* set*(.)execution(* transfer()execution(* transfer(*)execution(* transfer(*,String)execution(* com.xyz.service.AccountService.*(.) execution(* com.xyz.service.*.*(.) execution(* com.xyz.service.*.*(.) 32问题q如何配合切入点表达式,向切面类传递参数33使用新语法的好处q减少了代理类q在切入点的控制上更为细腻34

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号