spring学习总结-第三讲

来源:互联网 发布:淘宝联名信用卡额度 编辑:程序博客网 时间:2024/04/29 23:51

第三讲

一、AOP的基本概念

  1. 织入:将增强处理添加到目标对象中,并创建一个增强的对象的过程就是织入。织入有两种实现方式:编译时增强(如AspectJ)和运行时增强(如Spring AOP)
  2. 引入:将方法或者字段添加到被处理的类中。
  3. 目标对象:被AOP框架进行增强处理的对象。
  4. AOP代理:AOP框架创建的对象。

2、需要代理类不是接口的时候,Spring会自动的切换为使用cglib代理。

3、基于注解的“零配置”方法

  1. 定义切面bean:@Aspect
  2. 定义Before增强处理:@Before("execution(* cc.wsyw126.spring.service.imp.*.*(..))")
    1. 第一个*表示返回类型不限
    2. 第二个*表示类名不限
    3. 第三个*表示方法名不限
    4. 括号中的..代表任意个数、类型不限的形参
    5. Pointcut可以省去(value作用同pointcut)
  3. 定义AfterReturning增强处理:@AfterReturning(returning="rt",pointcut = "execution(* cc.wsyw126.spring.service.imp.*.*(..))")
    1. 声明rt时指定的类型会限制目标方法必须返回指定类型的值或没有返回值
    2. AfterReturning修饰的方法,必须有参数。若将参数rt的类型声明为Object,意味着对目标方法的返回值不加限制
    3. 3.
  4. 定义AfterThrowing增强处理:@AfterThrowing(throwing="ex",pointcut="execution(* cc.wsyw126.spring.service.imp.*.*(..))")
    1. 声明ex时指定的类型会限制目标方法必须抛出指定类型的异常
    2. AfterThrowing修饰的方法,必须有参数。若将参数ex的类型声明为Throwable,意味着对目标方法抛出的异常不加限制
  5. After增强处理:@After("execution(* cc.wsyw126.spring.service.imp.*.*(..))")
    1. AfterReturning:只有在目标方法成功完成后才会被织入。
    2. After:不管方法如何结束(包括成功和异常终止),它都会被织入。
    3. 基于ii的性质,After增强处理通常用于释放资源。
  6. Around增强处理
    1. 近似于before和afterreturning的总和。
    2. 不同的是:既可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标方法的执行。
    3. 通常需要在线程安全的情况下使用。
    4. 增强处理的方法的第一个形参必须是proceedingJoinPoint类型(并且至少包含一个形参)。
    5. 在方法内,调用proceed()方法才会执行目标方法,这就是控制目标方法执行时机和如何执行的关键。如果没有调用,则目标方法不会执行。
    6. around

4、当不同切面里的两个增强处理需要在同一个连接点被织入时,spring AOP将以随机的顺序织入。如果需要执行优先级,有两种方法:

  1. 让切面类实现org.springframework.core.Ordered接口,实现int getOrder()方法,该方法返回值越小,优先级越高。
  2. 直接使用@Order注解来修饰一个切面类。可指定一个int型的value属性,该属性值越小,优先级越高。

5、如果只访问目标方法的参数,可以使用args切入点表达式来绑定目标方法的参数。

  1. args
  2. @AfterReturning(returning="rvt" , pointcut="execution(* org.crazyit.app.service.impl.*.*(..)) && args(arg0,arg1,..)"),可以有多个参数只要第一个和第二个与access中的类型匹配即可。

6、定义切入点:

  1. 包含两部分
    1. 一个切入点的表达式。
    2. 一个包含名字和任意参数的方法签名。
  2. 用法实例:
    1. Aspect
    2. @AfterReturning(returning="rvt", pointcut="SystemArchitecture.myPointcut()")

7、切入点指示符:

  1. execution:用于匹配执行方法的连接点。

    1. Execution(modifiers-pattern?ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)

参考资料
轻量级Java EE企业应用实战(第4版)
备注
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/51744461
作者:WSYW126

0 0
原创粉丝点击