• Spring AOP切面


    在软件开发中,分布于应用多出的功能被称为和横切关注点. 通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(可是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离正是面向切面编成(AOP)所要解决的

    要了解什么是AOP,首先应该了解AOP相关术语,仅仅有全然理解这些,才干更好的掌握AOP

    描写叙述切面的经常使用术语有 通知(advice), 切点(pointcut), 连接点(join point).

    通知(advice)

    切面有目标-他必需要完毕的工作,成为通知.通知定义了切面是什么以及何时使用.

    Spring切面能够应用5种类型的通知

    • Before                在方法被调用之前调用通知
    • After                  在方法完毕之后调用通知,不管方法运行是否成功
    • After-returning    在方法成功运行之后调用通知
    • After-throwing     在方法抛出异常后调用通知
    • Around                通知包裹了被通知的方法,在被通知的方法调用之前和调用之后运行自己定义的行为
    连接点(join point) 

    连接点是在应用运行过程中能够插入切面的一个点.这个点能够是调用方法时,抛出异常时,甚至改动一个字段时.切面代码能够利用这些点插入到应用的正常流程之中,并加入新的行为

    切点(pointcut) 

    切点的定义会匹配通知所要织入的一个或多个连接点

    切面(Aspect) 

    切面是通知和切点的结合,通知和切点共同定义了关于切面的所有内容-它是什么,在何时和何处完毕其功能

    Spring提供了4种各具特色的AOP支持

    • 基于代理的经典AOP
    • @AspectJ注解驱动的切面
    • 纯POJO切面
    • 注入式AspectJ切面(适合Spring各个版本号)
    下面介绍怎样使用注解,在Spring使用AOP

    在XML文件里加入例如以下代码

    ?
    1
    <aop:aspectj-autoproxy>
    如今開始就能够使用@AspectJ注解来开启AOP,有意思的是,尽管我们使用@AspectJ注解作为指引来创建基于代理的切面,但本质上它仍然是一个Spring风格的切面.

    下面代码创建一个POJO使其成为切面

    ?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @Aspect
    public class LogAOP {
        //sevice包及其子包全部类的全部方法
        @Pointcut("execution(* com.kenshiro.service..*.*(..))")
        public void log(){}
     
        @Before("log()")
        public void beforeLog(){
            System.out.println("方法前运行");
        }
     
        @AfterReturning("log()")
        public void AfterLog(){
            System.out.println("方法成功返回运行");
        }
     
        @Around("log()")
        public void AroundLog(ProceedingJoinPoint joinpoint){
            System.out.println("方法之前运行");
            joinpoint.proceed();  //运行业务代码
            System.out.println("方法之后运行");
        }
    }

    就是这么简单,一个简单的POJO加上一个@Aspect ,定义一个或者多个切点(pointcut).N个通知方法(advice).

    切点配合通知便是切面,切面便是AOP(在什么位置,什么时候,做什么)


    更具体的AOP语法以及使用标准:http://blog.csdn.net/nthack5730/article/details/45604031

  • 相关阅读:
    关于$.ajax同步和异步的问题和提交后台的一些问题。
    maven的web项目手工发布
    eclipse中的maven配置
    springmvc转页面
    javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
    Maven项目导入后打红色X
    springmvc 拦截器,不拦截jsp文件
    RAID 磁盘阵列
    消息队列
    查看占用内存最高的进程
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5305788.html
Copyright © 2020-2023  润新知