• 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实现

  • 相关阅读:
    C++ 二分查找 哈希查找 数据结构
    CMT2380F32模块开发18-模拟电压比较器例程
    软考高级系统架构设计师系列之:系统架构设计案例分析常考知识点
    springcloud之nacos服务治理
    邦芒攻略:步入职场需要拥有的三种核心竞争力
    HiveQL中left join误区和多join的执行顺序
    数据库压力测试方法小结
    iOS APP内存泄漏的问题
    React报错之Objects are not valid as a React child
    护网中的分析研判岗有多重要
  • 原文地址:https://blog.csdn.net/weixin_54174102/article/details/126856727