Spring AOP (上)

  工作忙,香港服务器租用,时间紧,不过事情再多,学习是必须的。记得以前的部门老大说过:“开发人员不可能一天到晚只有工作,肯定是需要自我学习。第一:为了更充实自己,保持进步状态。第二:为了提升技术,提高开发能力。第三:保持程序员对技术和学习的热情,工作的激情。程序员还是需要把基础打扎实,修炼自己的内功。” 所以赶紧把学习的东西总结一下,加深印象。之前有说了下AOP的原理 () 。基于代理模式,了解了jdk动态代理和cglib的用法。但是在真正的使用AOP的时候,不可能写这么厚重的方法。

  Spring有两大核心,IOC和AOP。IOC在java web项目中无时无刻不在使用。然而AOP用的比较少,的确也是一般的项目用的场所不多。事务控制基本都用,但却是Spring封装的不需要我们再去实现,但Spring的AOP远不止这些,不能因为项目中没有使用,而不去学习及理解。我觉得这是作为一个java web软件开发人员必须具备的技能。业内很多将AOP应用在日志记录上,可惜我们项目没这么做,后面需要学习下。在这先把Spring AOP的基本用法,在脑子里理一边,做一次积累。

1、概念术语  

  在开始之前,需要理解Spring aop 的一些基本的概念术语(总结的个人理解,并非Spring官方定义):

  切面(aspect):用来切插业务方法的类。

  连接点(joinpoint):是切面类和业务类的连接点,其实就是封装了业务方法的一些基本属性,作为通知的参数来解析。

  通知(advice):在切面类中,声明对业务方法做额外处理的方法。

  切入点(pointcut):业务类中指定的方法,作为切面切入的点。其实就是指定某个方法作为切面切的地方。

  目标对象(target object):被代理对象。

  AOP代理(aop proxy):代理对象。

  通知:

  前置通知(before advice):在切入点之前执行。

  后置通知(after returning advice):在切入点执行完成后,执行通知。

  环绕通知(around advice):包围切入点,调用方法前后完成自定义行为。

  异常通知(after throwing advice):在切入点抛出异常后,执行通知。

2、Spring AOP环境

  要在项目中使用Spring AOP 则需要在项目中导入除了spring jar包之外,还有aspectjweaver.jar,aopalliance.jar ,asm.jar 和cglib.jar 。

好了,前提工作准备完成,Spring 提供了很多的实现AOP的方式,在学习过程中,循序渐进。进行Spring 接口方式,schema配置方式和注解的三种方式进行学习。好了废话不多说了,开始spring aop学习之旅:

3、方式一:AOP接口

  利用Spring AOP接口实现AOP,主要是为了指定自定义通知来供spring AOP机制识别。主要接口:前置通知MethodBeforeAdvice ,后置通知:AfterReturningAdvice,环绕通知:MethodInterceptor,异常通知:ThrowsAdvice 。见例子代码:

a、业务接口:

View Code

/** * 代理类接口,也是业务类接口<br> * * 利用接口的方式,spring aop 将默认通过jdk 动态代理来实现代理类<br> * 不利用接口,则spring aop 将通过cglib 来实现代理类 * * @author yanbin * IBaseBusiness {/*** 用作代理的切入点方法** @param obj* String delete(String obj);/*** 这方法不被切面切** @param obj* String add(String obj);/*** 这方法切不切呢?可以设置** @param obj* String modify(String obj);}

b、业务类:

View Code

/** * 业务类,也是目标对象 * * @author yanbin * BaseBusiness implements IBaseBusiness {/*** 切入点*/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 + “:瞄改瞄啊!”;}}

c、通知类:

前置通知:

View Code 人生没有彩排,每天都是现场直播。

Spring AOP (上)

相关文章:

你感兴趣的文章:

标签云: