• Spring_AOP的理解


    SpringFrameWork系列4



    前言

    AOP技术为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

    一、AOP核心概念

    1、横切关注点
    对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

    2、切面(aspect)
    类是对物体特征的抽象,切面就是对横切关注点的抽象

    3、连接点(joinpoint)
    被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

    4、切入点(pointcut)
    对连接点进行拦截的定义

    Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。Spring创建代理的规则为:
    1、默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了
    2、当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB

    二、JDK动态代理和CGLIB动态的区别

    JDK动态代理的实现是在运行时,根据一组接口定义,使用Proxy、InvocationHandler等工具类去生成一个代理类和代理类实例。
    CGLIB动态代理在运行期扩展Java类与实现Java接口。Hibernate用它实现PO(Persistent Object 持久化对象)字节码的动态生成,Spring AOP用它提供方法的interception(拦截)

    Cglib和jdk动态代理的区别
    动态代理解决了方法之间的紧耦合,
    IOC解决了类与类之间的紧耦合
    1、Jdk动态代理:利用拦截器(必须实现InvocationHandler)加上反射机制生成一个代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理
    2、 Cglib动态代理:利用ASM框架,对代理对象类生成的class文件加载进来,通过修改其字节码生成子类来处理
    什么时候用cglib什么时候用jdk动态代理?
    1、目标对象生成了接口 默认用JDK动态代理
    2、如果目标对象使用了接口,可以强制使用cglib
    3、如果目标对象没有实现接口,必须采用cglib库,Spring会自动在JDK动态代理和cglib之间转换

    Spring如何选择是用JDK还是cglib?
    1、当bean实现接口时,会用JDK代理模式
    2、当bean没有实现接口,用cglib实现

  • 相关阅读:
    记一次web登录通杀渗透测试
    工业RFID读写器选择指南
    《复盘:对过去的事情做思维演练》读书笔记
    IgH详解十二、IgH实现使用ENI文件配置从站(一)
    Java Reflect 反射
    Java BufferedOutputStream类的简介说明
    理解C语言中的位操作和整数类型:一个温度传感器读取问题的解析
    Java 中你绝对没用过的一个关键字?
    数据库索引优化
    【数据结构】第五章树与二叉树(1):树与二叉树的定义、性质,二叉树的存储结构
  • 原文地址:https://blog.csdn.net/weixin_54174102/article/details/126856727