




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 AOPSpring不是因为会了才去做,而是因为做了才能会!AOPAOP技术概述AOP概念1.面向方面编程2.作为OO面向对象的补充,而不是替代。AOP目标1.不改变现有代码2.给系统动态增加横切关注点。1.OCP开闭原则2.针对接口/抽象编程AOPAOP基本概念核心关注点u业务功能。切面/横切关注点u对日志安全等公共服务模块化连接点u程序执行中的某个特定点。切入点u设置加入切面位置的表达式,来匹配连接点。通知/Adviceu将切面在某个连接点执行。顾问Advisoru切面+切入点AOPAOP实现方式JDK动态代理uJDK1.4后增加的内容。u只能对实现了接口的类生成代理,而不能针对类。
2、CGLIB字节码增强u是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。因为是继承,所以该类或方法最好不要声明成finalApectJ支持方法拦截与属性修改Spring AOP只支持方法拦截。springspring对AOPAOP的支持如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP目标对象实现了接口,也可以强制使用CGLIB实现AOPu添加CGLIB库,SPRING_HOME/cglib/*.jar u在spring配置文件中加入如果目标对象没有实现接口,必须采用CGLIB库spring会自动在JDK动态代理和CGLIB之间转换常见横切关注点日志事务安全异常处
3、理性能检测AdviceAdvicelMethodBeforeAdvicel前置通知l在业务方法执行之前执行lAfterReturningAdvicel后置通知l在业务方法执行之后执行lMethodInterceptorl环绕通知l在业务方法执行前后执行,甚至替代拦截的方法。lThrowsAdvicel抛出异常时执行。核心关注点public class AopDemo implements IAopDemopublic void doSomething() throws ExceptionSystem.out.println(Process Buniess!);package com.lxt00
4、8.aop;public interface IAopDemopublic void doSomething() throws Exception;客户端ApplicationContext ctx=new ClassPathXmlApplicationContext(applicationContext.xml);IAopDemo demo=(IAopDemo)ctx.getBean(aopDemo);trydemo.doSomething();catch(Exception e)System.out.println(Found Exception);MethodBeforeAdviceMe
5、thodBeforeAdvicepublic class SecrityManagerimplements MethodBeforeAdvicepublic void before(Method m,Object args,Object target)System.out.println(before Check!);applicationContext.xmlapplicationContext.xml被代理目标:被代理目标:安全通知安全通知:ProxyFactoryBeanProxyFactoryBeancom.lxt008.aop.IAopDemo secrityAdvice After
6、ReturningAdviceAfterReturningAdvicepublic class LogManagerimplements AfterReturningAdvice public void afterReturning(Object returnValue,Method method,Object args, Object target) throws Throwable System.out.println(After Log!);MethodInterceptorMethodInterceptorpublic class PerformanceAroundAdvice imp
7、lements MethodInterceptorpublic Object invoke(MethodInvocation invocation) throws Throwable Object returnValue=null;/开始计时开始计时StopWatch sw = new StopWatch();sw.start(invocation.getMethod().getName();returnValue = ceed();/结束计时结束计时sw.stop();Method m = invocation.getMethod();Object target
8、= invocation.getThis();Object args = invocation.getArguments();MethodInterceptoMethodInterceptor rSystem.out.println();System.out.println(执行方法名执行方法名: + m.getName();System.out.println(目标类目标类: + target.getClass().getName();if(args!=null) System.out.println(参数列表参数列表:);for (int i = 0; i args.length; i+)
9、 System.out.print(第第 + i + 个参数个参数: + argsi);System.out.println();System.out.println(总时间总时间: + sw.getTotalTimeMillis() + ms);return returnValue;ThrowsAdviceThrowsAdvicepublic class MyThrowsAdvice implements ThrowsAdvice public void afterThrowing(Method method, Object args, Object target, Exception ex
10、) System.out.println(捕获其它不明异常捕获其它不明异常);System.out.println(异常发生方法异常发生方法: + method.getName();System.out.println();修改doSomethingdoSomething()()public void doSomething() throws ExceptionSystem.out.println(Process Buniess!);throw new Exception(unkown exception);加入异常测试。加入异常测试。增加业务方法增加业务方法引入引入AdvisorAdvisorAdvisordoSomethingRegexpMethodPointcutAdvisorRegexpMethodPointcutAdvisor.*doSomething.*RegexpMethodPointcutAdvisorRegexpMethodPointcutAdvisor applicatio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论