您的位置:首页 > 编程语言 > Java开发

SpringAop学习02:基础知识

2018-08-25 17:34 357 查看

一.概念

         面向切面编程,可以对业务逻辑的的各个部分进行隔离,从而使业务逻辑各个部分之间的耦合度降低,提高了程序的可重用性,同时提高了kai开发效率。

二、用途

       日志记录、性能统计、安全控制、权限管理、事务处理、异常处理、资源池管理

三、基础知识讲解

    1.切面(Aspect)

官方的chou抽象定义为"一个关注点的模块化,这个关注点可能会横切多个dui'对象“。切面就是类(TestAspect)所关注的具体行为。

   2.连接点(JoinPoint)

程序zhi执行过程中的某一行为.这是应用程序中使用Spring AOP框架采取操作的实际位置。被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器.execution表达式中的方法以及参数。

  3.通知(Advice)

这是在方法执行之前或之后采取的实际操作。 这是在Spring AOP框架的程序执行期间调用的实际代码片段。

A 前置通知(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。

B 后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。

C 返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。

D 环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。

E 抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知。

通知执行顺序:前置通知→环绕通知连接点之前→连接点执行→环绕通知连接点之后→返回通知→后通知

                                                                                                 →(如果发生异常)异常通知→后通知

 

4.切入点(Pointcut)

对连接点进行拦截的定义

    1)切入点表达式

      execution:用于匹配方法执行的连接点;

      within:用于匹配指定类型内的方法执行;

      this:用于匹配当前Aop代理对象类型的执行方法;注意是Aop代理对象的类型匹配,这样就可能包括引入接口也类型匹配;注意this中使用的表达式必须是完整类名,不支持通配符;

     target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;注意target中使用的表达式必须是完整类名,不支持通配符;

    args:用于匹配当前执行的方法传入参数为指定类型的zhi'执行方法;参数类型列表中的参数必须是完整类名,通配符不支持;args属于动态切入点,这种切入点开销非常大,非特殊qing情况下最好不要使用。

   @within:用于匹配持有指定注解类型内的方法;注解类型也必须是完整类名。

   @target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解,注解类型也必须是完整类名。

   @args:用于匹配当前执行的方法传入的参数持有指定注解的执行;注解类型也必须是完整类名。

   @annotation:用于匹配当前执行方法持有指定注解的方法;注解类型也必须是完整类名;

   bean:Spring AOP扩展的,AspectJ没有对于指示符,用于匹配特定名称的Bean对象的执行方法;

   reference pointcut:表示引用其他命名切入点,只有注解风格支持,XML风格不支持。

 2)匹配语法

      * 匹配任何数量字符;

     .. 匹配任何数量字符的重复,如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。

    + 匹配指定类型的子类型;仅能作为后缀放在类型模式后边。

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: