面试必问系列之JDK动态代理
扫描文末二维码或者微信搜索公众号 小李不秃 ,即可关注微信公众号,获取到更多 Java 相关内容。 1. 带着问题去学习 面试中经常会问到关于 Spring 的代理方式有哪两种?大家异口同声的回答: JDK 动态代理和 CGLIB 动态代理。 这两种代理有什么区别呢?JDK 动态代理的类通过接口实现,CGLIB 动态代理是通过子类来实现的。 那 JDK 动态代理你了到底了解多少呢?有去看过代理对象的 class 文件么?下面两个关于 JDK 动态代理的问题你能回答上来么? 问题1:为什么 JDK 动态代理要基于接口实现?而不是基于继承来实现? 问题2:JDK 动态代理中,目标对象调用自己的另一个方法,会经过代理对象么 ? 小李带着大家更深入的了解一下 JDK 的动态代理。 2. JDK 动态代理的写法 JDK 动态代理需要这几部分内容:接口、实现类、代理对象。 代理对象需要继承 InvocationHandler ,代理类调用方法时会调用 InvocationHandler 的 invoke 方法。 Proxy 是所有代理类的父类,它提供了一个静态方法 newProxyInstance 动态创建代理对象。 public interface IBuyService { void buyItem ( int userId) ; void refund ( int nums) ; }