Spring AOP (下)

  昨天记录了Spring AOP学习的一部分(),本来是想一口气梳理完的。但是大晚上时间不够(无奈一场奥运篮球总决赛耗费掉了2小时,网站空间,不过的确相当精彩),又考虑到篇幅太长,阅读性比较差,香港虚拟主机,所以将后半部分更偏于应用的重起一篇随笔。

  利用方式一的配置起来,可见代码还是非常的厚重的,定义一个切面就要定义一个切面类,然而切面类中,就一个通知方法,着实没有必要。所以Spring提供了,依赖aspectj的schema配置和基于aspectj 注解方式。这两种方式非常简介方便使用,也是项目中普遍的使用方式。梳理之:

4、方式二:schema配置

a、业务类:

View Code

/** * 业务类 * * @author yanbin * AspectBusiness {/*** 切入点*/public String delete(String obj) {System.out.println(“==========调用切入点:” + obj + “说:你敢删除我!===========\n”);return obj + “:瞄~”;}public String add(String obj) {System.out.println(“================这个方法不能被切。。。============== \n”);return obj + “:瞄~ 嘿嘿!”;}public String modify(String obj) {System.out.println(“=================这个也设置加入切吧====================\n”);return obj + “:瞄改瞄啊!”;}}

b、切面类:切面类中,包含了所有的通知

View Code

/** * 定义一个切面 * * @author yanbin * AspectAdvice {/*** 前置通知** @param jp doBefore(JoinPoint jp) {System.out.println(“===========进入before advice============ \n”);System.out.print(“准备在” + jp.getTarget().getClass() + “对象上用”);System.out.print(jp.getSignature().getName() + “方法进行对 ‘”);System.out.print(jp.getArgs()[0] + “‘进行删除!\n\n”);System.out.println(“要进入切入点方法了 \n”);}/*** 后置通知** @param jp*连接点* @param result*返回值 doAfter(JoinPoint jp, String result) {System.out.println(“==========进入after advice=========== \n”);System.out.println(“切入点方法执行完了 \n”);System.out.print(jp.getArgs()[0] + “在”);System.out.print(jp.getTarget().getClass() + “对象上被”);System.out.print(jp.getSignature().getName() + “方法删除了”);System.out.print(“只留下:” + result + “\n\n”);}/*** 环绕通知** @param pjp*连接点doAround(ProceedingJoinPoint pjp) throws Throwable {System.out.println(“===========进入around环绕方法!=========== \n”);// 调用目标方法之前执行的动作System.out.println(“调用方法之前: 执行!\n”);// 调用方法的参数Object[] args = pjp.getArgs();// 调用的方法名String method = pjp.getSignature().getName();// 获取目标对象Object target = pjp.getTarget();// 执行完方法的返回值:调用proceed()方法,就会触发切入点方法执行Object result = pjp.proceed();System.out.println(“输出:” + args[0] + “;” + method + “;” + target + “;” + result + “\n”);System.out.println(“调用方法结束:之后执行!\n”);}/*** 异常通知** @param jp* @param e doThrow(JoinPoint jp, Throwable e) {System.out.println(“删除出错啦”);}}

c、配置文件:

View Code

xmlns:xsixmlns:context=”http://www.springframework.org/schema/context”xmlns:aop=”http://www.springframework.org/schema/aop”xsi:schemaLocation=””default-autowire 只匹配add方法作为切入点<aop:pointcut expression=”execution(* aop.schema.*.add(..))” />pointcut-ref

d、测试类:

坚硬的城市里没有柔软的爱情,生活不是林黛玉,

Spring AOP (下)

相关文章:

你感兴趣的文章:

标签云: