zoukankan      html  css  js  c++  java
  • SpringAOP ApectJ 动态代理

    参考链接:https://docs.spring.io/spring/docs/4.3.13.RELEASE/spring-framework-reference/htmlsingle/#aop

    http://blog.csdn.net/javazejian/article/details/56267036

    一.AspectJ

    AspectJ是一个java实现的AOP框架,它能够对java代码进行AOP编译(一般在编译期进行),让java代码具有AspectJ的AOP功能(当然需要特殊的编译器),可以这样说AspectJ是目前实现AOP框架中最成熟,功能最丰富的语言,更幸运的是,AspectJ与java程序完全兼容,几乎是无缝关联。在使用时,我们首先使用aspect关键字定义了一个类,这个类就是一个切面,它可以是单独的日志切面(功能),也可以是权限切面或者其他,在切面内部需要使用pointcut定义了切点,而所谓的切点就是那些需要应用切面的方法,pointcut就是定义这些需要捕捉的方法(常常是不止一个方法的),这些方法也称为目标方法,最后还需要定义了通知,通知就是那些需要在目标方法前后执行的函数,如before()即前置通知在目标方法之前执行,另一个是after()即后置通知。到这里也就可以确定,切面就是切点和通知的组合体,组成一个单独的结构供后续使用。

    通知的5种类型分别如下:

    • before 目标方法执行前执行,前置通知
    • after 目标方法执行后执行,后置通知
    • after returning 目标方法返回时执行 ,后置返回通知
    • after throwing 目标方法抛出异常时执行 异常通知
    • around 在目标函数执行中执行,可控制目标函数是否执行,环绕通知

    静态代理:AspectJ主要采用的是编译期织入,在这个期间使用AspectJ的acj编译器(类似javac)把aspect类编译成class字节码后,在java目标类编译时织入,即先编译aspect类再编译目标类,AspectJ本质是编译期即完成的静态代理。

     二.Spring AOP的实现原理概要

    Spring AOP的实现原理是基于动态织入的动态代理技术,而AspectJ则是静态织入,而动态代理技术又分为Java JDK动态代理和CGLIB动态代理,前者是基于反射技术的实现,这里的反射指的是通过调用反射方法method.invoke(target, args);;后者是基于继承的机制实现,下面通过一个简单的例子来分析这两种技术的代码实现,CGLIB更接近ASpectJ的实现原理。

  • 相关阅读:
    引用类型Array进行数值对比(应用jquery版)
    在网站前端中,你可能会用到的这些…
    javascript获得鼠标的坐标值
    增加PV方法
    wordpress后台修改“WordPress 地址(URL)”后无法打开的解决方法
    css给网页添加 黑白滤镜
    配置Android开发环境(fedora)
    成功的从fedora 7升级到了fedora 8
    听说这些是公司高管必读的笑话
    debian英文环境中中文输入
  • 原文地址:https://www.cnblogs.com/heapStark/p/8358217.html
Copyright © 2011-2022 走看看