发布时间:2025-12-10 19:37:23 浏览次数:7
一个案例,入门java动态代理技术是什么_java入门案例(这是我的第三次反馈)首先我们模拟一个场景我们要找周杰伦唱歌表演但是我们没办法直接找到周杰伦周杰伦指派了一个代理人来接待我们,我们只能向代理人提出我们的请求从这个角度来看是代理人间接地实现了我们的愿望与此同时对于周杰伦来说代理人也将我们的请求进行了适当的处理这个思想类比于Java中的动态代理技术它的主要工作就是对于原始类的方法进行(预)处理(包括拦截、加强、等)然后去
(这是我的第三次反馈)
首先我们模拟一个场景
我们要找周杰伦唱歌表演
但是我们没办法直接找到周杰伦
周杰伦指派了一个代理人来接待我们,我们只能向代理人提出我们的请求
从这个角度来看是代理人间接地实现了我们的愿望
与此同时对于周杰伦来说代理人也将我们的请求进行了适当的处理
这个思想类比于Java中的动态代理技术
它的主要工作就是对于原始类的方法进行(预)处理(包括拦截、加强、等)然后去间接地调用原始类的方法
下面就让我们去完成这个任务
1.首先创建周杰伦这个类(在此特别说明一个类要实现代理对象,他们必须实现同一个接口,毕竟同类才能够做代理么)
package proxy;public class Jay implements Person { @Override public String sing(String name){ System.out.println("周杰伦在唱"+name); return "谢谢老板!"; } @Override public String posing(String name){ System.out.println("周杰伦在耍"+name); return "hello 大家好我是周杰伦!"; }}希望我今天分享的这篇文章可以帮到您。
2.抽取接口Person(无论是杰伦还是代理都是人)
package proxy;public interface Person { public abstract String sing(String name); public abstract String posing(String name);}3.创建代理类
我们通过反射技术创建一个代理对象,代理对象拥有原始类要代理的全部方法与对应的参数
通过对方法的判断做出相应的处理(比如在这里我们就是向观众要钱之后才肯唱歌)
package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class JayProxy { private Person jay = new Jay(); public Person getProxy(){ //代理类的加载器 原始类的接口 调用的处理程序 return (Person) Proxy.newProxyInstance(JayProxy.class.getClassLoader(),jay.getClass().getInterfaces(),new InvocationHandler() { @Override //代理对象的实例 接口中的方法 方法中对应的参数 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(method.getName().equals("sing")){ System.out.println("你先拿两万来!"); return method.invoke(jay, args); } if(method.getName().equals("posing")){ System.out.println("free!!"); return method.invoke(jay, args); } return null; } }); }}4.创建测试类进行测试
package proxy;public class Test { public static void main(String[] args) { JayProxy proxy = new JayProxy(); Person p = proxy.getProxy(); System.out.println(p.posing("双节棍!")); }}5.运行结果
free!!周杰伦在耍双节棍!hello 大家好我是周杰伦!好了你已经入门了!
特别说明:这篇文章借鉴了方立勋老师的视频,在此感谢方老师!