理解了这个应该就理解了CGLib动态代理有final的方法引发的空指针问题的原因了

在main函数里new了一个B类的实例,并调用了setName方法,实际上执行的是target的setName方法,设置的是target的字段name,B实例的字段name仍然为空。调用notFinalMethod方法也是调用target的方法并能把target的字段name打印出来。但是finalMethod方法由于有final修饰符,所以不能在B中重写,当调用finalMethod方法时,就只能乖乖地调用B本身的finalMethod方法而不能调用target的finalMethod方法,这时由于B实例的name为空,所以打印出来的值也就为空了。

package com.citi.icg.as.component;
public class CGLibSimulate {public static void main(String[] args) {A a=new B();a.setName("aa");a.notFinalMethod();a.finalMethod();}public static class A {protected String name = null;       public final void finalMethod() {System.out.println(name);}public void notFinalMethod() {System.out.println(name);}public void setName(String name){this.name=name;}}public static class B extends A {private A target=new A();        @Overridepublic void notFinalMethod() {target.notFinalMethod();}       @Overridepublic void setName(String name){target.setName(name);}}
}
aa
null

[JAVA-坑]CGLib动态代理引起的空指针异常相关推荐

  1. 【java】CGLIB动态代理原理

    文章目录 1. 简介 2. 示例 3. 原理 4. JDK动态代理与CGLIB动态代理区别(面试常问) 1. 简介 CGLIB的全称是:Code Generation Library. CGLIB是一 ...

  2. Java设计模式-----Cglib动态代理(Cglib Proxy)

    接上文:4.2Java设计模式-----JDK动态代理(Dynamic Proxy) Cglib动态代理 百度百科:Cglib是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java ...

  3. 【java】CGLIB动态代理原理分析

    1.概述 前一篇文章介绍了CGLIB中常用的API,实际上使用了Enhancer和MethodInterceptor之后会生成代理子类,这篇文章就是分析一下CGLIB动态代理的原理. 2.CGLIB动 ...

  4. 深入理解Java Proxy和CGLIB动态代理原理

    点击上方关注,每天进步一点点 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译 ...

  5. Java Proxy和CGLIB动态代理原理

    动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...

  6. Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理

    Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理 代理模式 JDK动态代理 CGLIB动态代理 代理模式 代理模式是23种设计模式的一种,指一个对象A通过持有另一个对象B,可以具有B ...

  7. java动态代理和cglib动态代理

    本文转自: http://blog.csdn.net/leon709/article/details/9529307 动态代理应用广泛,spring,Struts等框架很多功能是通过动态代理,或者进一 ...

  8. Java中的原生动态代理和CGLIB动态代理的原理,我不信你全知道!

    作者:CarpenterLee cnblogs.com/CarpenterLee/p/8241042.html 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询 ...

  9. java 笔记(3) —— 动态代理,静态代理,cglib代理

    0.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口. 代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存 ...

最新文章

  1. 白钢条用什么可以切割_错怪李佳琦了!原来用小苏打刷牙,1个月真的可以白4度,太心动了...
  2. mysql sum_MySQL中的SUM函数使用教程
  3. Node.js package.json
  4. java rmi配置_Java、Spring配置RMI连接
  5. SAP License:SAP不便解决的问题之六——采购组在审批策略中的作用
  6. 从产品角度谈如何搞定主动用户与被动用户
  7. 多个Excel文件合并成一个文件
  8. 盘点购物分享系统,有兴趣的来看看哦
  9. linux救黑砖手机,手机黑砖9006/9008救砖教程 通用救砖模式详细流程
  10. 一张图讲清楚产品架构,手把手教你画产品框架图
  11. 简单线性相关案例-求相关系数
  12. Windows 开启护眼模式 | Windows护眼软件
  13. 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年4月份最新版)
  14. php模拟IP请求,如何在php中利用curl对ip进行模拟
  15. 【论文精读】2016-CVPR-Learning temporal regularity in video sequences
  16. 谷歌浏览器——新建下载任务
  17. 分布式定时任务原理以及解决方案-指定时间执行定时任务
  18. k8s查看pod的yaml文件_k8s yaml文件说明
  19. 中国联通和中国电信要取得5G领先优势?中国移动才是领先者!
  20. 美国互联网影视的盈利模式 ——HuLu模式

热门文章

  1. Quick cocos2dx学习笔记
  2. 一起学习linux之lamp脚本
  3. morphological antialiasing
  4. RadonDB - 基于MySQL的云原始分布式数据库,用于构建全局的,可扩展的云服务
  5. MAC下 Intellij IDEA GO语言插件安装及简单案例
  6. java判断字符串中是否含有某个字符串
  7. java excel解析 poi_Java解析Excel之POI(一)
  8. Windows10 环境下Jupyter Notebook的安装与使用
  9. 给网站文字添加图标-Font Awesome
  10. “1251 – Client does not support authentication protocol requested by server;consider upgrading MySQL