欢迎光临散文网 会员登陆 & 注册

Spring boot 和 jdk 动态代理 以及Aop实现细节

2023-08-23 11:21 作者:MicroShuai  | 我要投稿

1.Mapper生成代理对象

实现类调用Mapper代理对象
@Mapper 生成代理对象,并注入到Aop容器中

2.代理对象一定是基于接口实现的吗? 答案是:不是

            Jdk 生成的代理对象 是 基于 接口 实现的

            CGLIB  是 基于 接口 或者 实现类 实现 的

            那么基于CGLIB 实现类 代理对象 能实现AOP吗?它的功能能否增强?

             答案是:都是可以的,例如我一下开启一个事务嵌套:

    

实现类,开启事务

 当我想删除部门,和当前部门下所有的员工,这时删除成功的!并且我的数据库里面是有记录的,证明 当 注入 实现类  是可以实现功能增强(aop)

3.切换 jdk 和 SpringBoot 代理

    在SpringBoot的配置文件中设置: false 为 jdk  ture 为 cglib

4.区别

CGLIB:

jdk代理:

5.Spring CGLIB 是用于生成代理对象的工具

Spring CGLIB 是用于生成代理对象的工具,而不是代理对象本身。当使用 CGLIB 创建代理时,!!!!!代理对象会是目标类的一个子类!!!!!!,而且会重写目标类中的所有非 final 方法。这样,当你调用代理对象上的方法时,可以执行一些自定义逻辑,然后调用真实目标对象上的相应方法。

6.是否一定要使用Aop 切面注解@Aspect 才能实现功能增强?

    答案:不是

    用@Service去注入一个实现类,

  • 如果服务类不涉及事务安全检查性能分析 其他需要拦截方法调用的特性,那么通常注入的就是代理对象。

  • 如果服务类不涉及这些特性,那么注入的是 普通类

7.jdk 不能注入 实现类对象,只能注入 接口的代理对象,不然会报错

可以强制使用@FnableAsync @EnableCaching 


Spring boot 和 jdk 动态代理 以及Aop实现细节的评论 (共 条)

分享到微博请遵守国家法律