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

  • 相关阅读:
    es的优势
    Java项目源码下载SSM网上水果生鲜超市商城|电商购物系统
    任正非说:那技术支援最高的理想是什么?——手到病除!像华佗一样。你们有没有这样的“华佗”?你们的“华佗”是谁?
    c语言,c++,JAVA,Python应该怎么选择?
    telnet|nc 命令返回“连接失败”
    dbeaver 1064 42000 错误 query execution failed
    点燃那团火焰
    212 - 218. MySQL索引的基本用法
    Go 复合类型之字典类型介绍
    Java8 新特性之Stream(一)-- 认识Stream
  • 原文地址:https://blog.csdn.net/weixin_54174102/article/details/126856727