当前位置: 首页 > 网络应用技术

如何避免beannotofrequiredtypeexception和cglib

时间:2023-03-05 21:59:27 网络应用技术

  今天使用Spring时,我想模仿AOP来实现相应的代理,但是它会触发beannotofrequiredtypexception pecception异常,因为春季将执行类验证。

  因此,我突然变得好奇,决定学习,如何避免这种验证过程。

  JDK代理和CGLIB之间的区别

  一个普遍讨论的问题,询问完整性(单词数)或放任:

  PS:配置可以

  常规方法是CGLIB,因此仍以这种方式分析主流过程。通过补充预知,猜测是由于CGLIB的特征,实际上已被验证。

  看到拦截入口,然后您必须查看如何通过后处理器在AOP中处理它。首先,查看后处理器链接列表

  步骤1:当对象A中的字段是@Autowired注入的AOP代理类

  目前,我们可以找到在DefaultListableBeanFactory#doreolvePendency链接中,将获得代理类的对象。获得的对象如下图所示:

  步骤2:判断班级的关系

  步骤3:判断班级关系的逻辑

  这表明CGLIB创建的对象符合条件:相同或超级或覆盖

  回去这里查看以前的问题,这很简单:

  然后,继续审查CGLIB的创建过程,实际上,在汇编的结果中,您可以直观地看到代理的对象:

  关于CGLIB的基础,您可以看到CGLIB(代码生成库)的简介和原理。

  FastClass的角色

  fastClass是每种方法的数字,并通过数字找到该方法,以便可以避免效率

  CGLIB将生成2个快速阶级:

  原因:CGLIB代理是基于继承的,公共和最终方法不能在父类中继承,因此需要父母类的快速班级

  FastClass有两种主要方法:

  eNchance对象

  在此之前,我了解到CGLIB通过重写字节代码生成主类来生成代理的目的。让我们看一下原始方法被重写的内容

  您还可以在这里看到映射关系