spring aop

上传人:第*** 文档编号:54410303 上传时间:2018-09-12 格式:PPT 页数:22 大小:265KB
返回 下载 相关 举报
spring aop_第1页
第1页 / 共22页
spring aop_第2页
第2页 / 共22页
spring aop_第3页
第3页 / 共22页
spring aop_第4页
第4页 / 共22页
spring aop_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《spring aop》由会员分享,可在线阅读,更多相关《spring aop(22页珍藏版)》请在金锄头文库上搜索。

1、第三章 Spring AOP,2,AOP概念,Aspect Oriented Programming(AOP)是近来较为热门的一个话题。AOP,国内大致译作“面向方面编程” 而在AOP中,Aspect的含义,理解为“切面”比较合适。所以更倾向于“面向切面编程”的译法。,3,AOP与OOP区别,OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。 而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。 这两种设计思想在目标上有着本质的差异。,4,AOP和OOD/OO

2、P并不冲突,我们完全可以在一个应用系统中同时应用OOD/OOP和AOP设计思想,通过OOD/OOP对系统中的业务对象进行建模,同时通过AOP对实体处理过程中的阶段进行隔离处理。即使不是OOD/OOP,而是在传统的POP(面向过程编程)中,AOP也能起到同样的作用。 将不同阶段领域加以分隔,这是否就算是AOP呢? AOP还有另外一个重要特点:源码组成无关性,5,倘若应用中通过某个具体的业务逻辑类实现了独立的权限检查,而请求调度方法通过预编码调用这个权限模块实现权限管理。那么这也不算是AOP。对于AOP组件而言,很重要的一点就是源码组成无关性,所谓源码组成无关性,体现在具体设计中就是AOP组件必须

3、与应用代码无关,简单来讲,就是应用代码可以脱离AOP组件独立编译。,6,为了实现源码组成无关性,AOP往往通过预编译方式(如AspectJ)和运行期动态代理模式(如Spring AOP 和JBoss AOP)实现。,静态代理,JDK动态代理,CGLib动态代理,7,public class LogHandler implements InvocationHandler private Logger logger = Logger.getLogger(this.getClass().getName(); private Object delegate; public Object bind(Ob

4、ject delegate) this.delegate = delegate; return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this); public Object invoke(Object proxy, Method method, Object args) throws Throwable Object result = null; log(“method starts.“ + method); result = meth

5、od.invoke(delegate, args); log(“method ends.“ + method); return result; private void log(String msg) this.logger.log(Level.INFO,msg); ,8,LogHandler handler = new LogHandler(); IHello hello = (IHello)handler.bind(new Hello(); hello.hello(“tom“);,9,AOP的重要概念,1 切面(Aspect) 切面,对象操作过程中的截面。这可能是AOP中最关键的一个术语。

6、 我们首先来看一个应用开发中常见的切面:用户权限检查。大概只要是完整的应用,都少不了用户权限检查这个模块,不同身份的用户可以做什么,不可以做什么,均由这个模块加以判定。而这个模块调用的位置通常也比较固定:用户发起请求之后,执行业务逻辑之前。 针对权限检查这一模块进行分离,我们就得到了一个切面:,10,11,切面意义何在? 首先根据上例,假设我们实现了一个通用的权限检查模块,那么就可以在这层切面上进行统一的集中式权限管理。而业务逻辑组件则无需关心权限方面的问题。也就是说,通过切面,我们可以将系统中各个不同层次上的问题隔离开来,实现统一集约式处理。各切面只需集中于自己领域内的逻辑实现。 这一方面使

7、得开发逻辑更加清晰,专业化分工更加易于进行;另一方面,由于切面的隔离,降低了耦合性,我们就可以在不同的应用中将各个切面组合使用,从而使得代码可重用性大大增强。,12,2 连接点(JoinPoint) 程序运行过程中的某个阶段点。如某个方法调用,或者某个异常被抛出。 3 处理逻辑(Advice) 在某个连接点所采用的处理逻辑处理逻辑的调用模式通常有三种: i. Around 在连接点前后插入预处理过程和后处理过程。 ii. Before 仅在连接点之前插入预处理过程。 iii. Throw 在连接点抛出异常时进行异常处理。 4 切点(PointCut) 一系列连接点的集合,它指明处理方式(Adv

8、ice)将在何时被触发。,13,Pointcuts - - -,Jointpoint,Jointpoint,Jointpoint,Logging,LogHandler,SecurityHandler,Aspect,Weave,具体设计为Advices,根据,Cross-Cutting,被辨识为,14,示例1 BeforeAdvice,public class LogBeforeAdvice implements MethodBeforeAdvice private Logger logger = Logger.getLogger(this.getClass().getName(); publi

9、c void before(Method method, Object arg, Object target) throws Throwable logger.log(Level.INFO,“method start.“ + method); , logBeforeAdvice ,15,其他Advice,AfterAdvice: Interface:AfterReturningAdvice public void afterReturning(Object obj,Method method Object args,Object target) throws Throwable ,Around

10、Advice Public interface MethodInterceptor public Object invoke(MethodInvocation methodInvocation) Throws Throwable; ,ThrowAdvice 标记接口 需定义afterThrowing Public void afterThrowing(Method method,Object args, Object target,Throwable subclass),16,public class AfterAdvice implements AfterReturningAdvice pr

11、ivate Logger logger = Logger.getLogger(this.getClass().getName(); public void afterReturning(Object returnValue, Method m, Object args, Object target) throws Throwable logger.log(Level.INFO,“method ends.“ + m); ,17,AOP2.0的支持,public class LogBeforeAdvice private Logger log = Logger.getLogger(this.get

12、Class().getName(); public void before(JointPoint jointPoint) log.log(Level.INFO,”method starts” ); ,18,19, Hello ,20, Hello ,21,annotation,Aspect public class LogBeforeAdvice private Logger logger = Logger.getLogger(this.getClass().getName(); Before(“execution(* com.hello.CharCase.*()“) public void before(JoinPoint jointPoint) logger.log(Level.INFO,“method starts.“ + jointPoint.getSignature().getName() + “ “ + jointPoint.getSignature().getDeclaringTypeName(); ,22,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

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