JDK动态代理

动态代理是指系统根据要代理的接口,自动帮我们生成并编译和加载代理类,并将代理类中的代理逻辑抽象到 InvocationHandler 的invoke方法中,由开发者实现。在静态代理中,我们需要自己实现代理类,将代理逻辑也写在代理类里面。而动态代理省去了我们自己写代理类的工作,系统只需要知道要代理的接口,然后利用反射获取接口的方法信息,生成代理类,代理类其实只是些模板代码,而又为了能定制代理逻辑,系统便定义了一个 InvocationHandler,生成的代理类中的方法都会调用 InvocationHandler 中的invoke方法,并将代理类对象,接口的方法对象,方法参数传入。所以真正的代理逻辑在 InvocationHandler 类中。

本质:就是将原来自己编写的代理类(静态代理)转化给系统帮我们自动生成。

接口:

目标对象:必须实现上面接口

动态代理:


注意:通过实现InvocationHandler 接口在invoke方法编写自己本身需要实现的业务逻辑。

而invoke方法在生成的代理对象调用自己方法时触发运行。

使用Proxy.newProxyInstance(

car.getClass().getClassLoader(),//此处的car对象必须是接口类型

car.getClass().getInterfaces(),//此处的car对象必须是接口类型

this);获取生成的代理对象。

测试:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容