Spring-AOP.doc

上传人:sk****8 文档编号:3520629 上传时间:2019-06-01 格式:DOC 页数:11 大小:204KB
下载 相关 举报
Spring-AOP.doc_第1页
第1页 / 共11页
Spring-AOP.doc_第2页
第2页 / 共11页
Spring-AOP.doc_第3页
第3页 / 共11页
Spring-AOP.doc_第4页
第4页 / 共11页
Spring-AOP.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、Spring AOPMade by Michael.S全文以超市售货这个例子来演示 SpringAOP 的实现。其中包括:POJO(Customer, Squishee) ,接口 WallsMart(其中有方法 Squishee buySquishee(Customer customer),接口实现WallsMart_Xian,Advice(包括 Before, afterReturning)AOP-API 实现Advice 介绍Before Advice需要实现MethodBeforeAdvice接口public interface MethodBeforeAdvice void befor

2、e(Method method, Object args, Object target)throws ThrowableMethod 是目标方法,args 是参数,target 是方法调用的目标对象其中,args 和 target 对象是不能够改变的。实现:public class WelcomeAdvice implements MethodBeforeAdviceOverridepublic void before(Method method, Object args, Object target)Customer customer = (Customer)args0;System.out

3、.println(“Hello, “ + customer.getName() + “! Welcome .“);在 xml 中配置com.primeton.spl.WallsMartadvice(1).配置被代理对象 bean: wallsMartTarget(2).配置 Advise bean: welcomeAdvice(3).配置代理类 bean: wallsMart其中:属性 proxyInterfaces 是指代理的接口属性 interceptorNames 是指要拦截的方法名字(在类 Advice 中可以包括before,afterReturning 等方法,这样都会进行拦截)属

4、性 target 是指被代理对象wallsMart 这个 bean 的功能即:(1).实现 wallsMart 这个接口(2).应用 welcomeAdvice 这个对象到所有的调用中(3).将 WallsMart_Xian 设定为目标对象Comment Mike1: 需要引入aopalliance.jarAfterAdvice需要实现AfterReturningAdvice接口public interface AfterReturningAdvice void afterReturning(Object returnValue, Method method,Object args, Obje

5、ct target) throws ThrowableOverridepublic void afterReturning(Object arg0, Method arg1, Object arg2,Object arg3) throws ThrowableSystem.out.println(“This is After advice . “);其中参数 returnValue是指目标方法的返回值AroundAdvice需要实现MethodInterceptor接口public interface MethodInterceptor extends Interceptor Object in

6、voke(MethodInvocation invocation) throws Throwable;注意:(1). MethodInterceptor控制着目标方法是否被调用(通过调用MethodInvocation.proceed());(2). MethodInterceptor给你设定返回值的权力。你可以返回你想要的返回值(类型必须相同),通过调用 proceed()方法。class AroundAdvice implements MethodInterceptorOverridepublic Object invoke(MethodInvocation arg0) throws Th

7、rowableSystem.out.println(“Before“);Object obj = arg0.proceed();System.out.println(“After“);return obj;ThrowAdvice这是一个Marker 接口,没有任何方法需要被实现, Advice类实现该接口只需要至少实现下列两个方法之一即可:void afterThrowing(Throwable throwable)void afterThrowing(Method method, Object args, Object target,Throwable throwable)参数throwab

8、le就是指所抛出异常。你也可以在一个Advice类中含有多个afterThrowing方法用来区分对待不同的异常信息。class ExceptionAdvice implements ThrowsAdvicepublic void afterThrowing(NullPointerException eNull)System.out.println(“Null Pointer .“);public void afterThrowing(RuntimeException eRT)System.out.println(“Run Time .“);注意:上述两个方法不能够捕获和处理异常,异常信息会继

9、续传播下去。PointCutPointcut根据方法和类判断哪里需要织入。public interface Pointcut ClassFilter getClassFilter();MethodMatcher getMethodMatcher();其中:public interface ClassFilter boolean matches(Class clazz);public interface MethodMatcher boolean matches(Method m, Class targetClass);public boolean isRuntime();public bool

10、ean matches(Method m, Class target, Object args);推荐使用静态 PointcutAdvisor是pointcut 和 advice的结合。public interface PointcutAdvisor Pointcut getPointcut();Advice getAdvice();(1). NameMatchMethodPointcutAdvisor类中有两个方法:public void setMappedName(String)public void setMappedNames(String)根据方法名字进行拦截Beans.xml 文件

11、配置:.配置 advice 的 bean,包含 before,afterReturning 等 advice 方法:.配置 advisororder*可以使用通配符*来进行匹配.配置 ProxyFactoryBeancom.primeton.spl.cleaning.MaidServicefrequentCustomerPointcutAdvisor与上文中提到的 Before 不同的地方在于:Before:Advisor:这样会降低耦合,而且会更加灵活。(2). RegexpMethodPointutAdvisor正则表达式实现方法Xml 文件配置只需要将上述 advisor 改变即可:.*

12、get.*AOP-Annotation 实现1. 启动 aop 支持(1).普通 xml 格式(2).DTD 格式2. 声明 AspectAspectpublic class FrequentCustomerAdvice在 Advice 类上面声明该类为 aspect 类3. 声明 pointcut,设置 before,after 等方法Before(“execution( * com.primeton.spl.cleaning.MaidService.*(.)“)public void before()System.out.println(“Before Advice . “);注意:Aro

13、und 方法 需要有一个参数来使得方法运行Around(“execution( * com.primeton.spl.cleaning.MaidService.*(.)“)public void around(ProceedingJoinPoint pjp) throws ThrowableSystem.out.println(“Before method“);pjp.proceed();System.out.println(“End method“);AOP-XML 实现1. 配置 Aspect2. 配置 pointcut3. 配置 before,after注意:这时的 before 可以不用像 API 实现方法那样继承那些接口;如果 before等方法有参数,则需要在 execution 表达式中进行设置。public void before()System.out.println(“Before Advice . “);全局 pointcut

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

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。