Java动态代理初识

package d9_proxy; /** * FileName: Test * Author: lps * Date: 2022/4/26 13:02 * Sign:刘品水 Q:1944900433 * 学习开发一个动态代理对象出来 理解动态代理执行流程 */ public class Test { public static void main(String[] args) { //创建一个对象 对象的类必须实现接口 star s = new star("张伟"); Skill s2 = StarAgentProxy.getProxy(s); s2.jump(); s2.sing(); } }
package d9_proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * FileName: StarAgent * Author: lps * Date: 2022/4/26 13:12 * Sign:刘品水 Q:1944900433 */ public class StarAgentProxy { /** * 设计一个方法返回一个明星对象的代理对象 * static Object newProxyInstance(ClassLoader loader, * Class<?>[] interfaces,对象的实现接口列表 * InvocationHandler h) * 返回指定接口的代理实例,该代理实例将方法调用分派给指定的调用处理程序。 */ public static Skill getProxy(star s) { //为star这个对象生成代理对象 return (Skill) Proxy.newProxyInstance(s.getClass().getClassLoader(), s.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("请掏出首付"); Object rs = method.invoke(s, args); //method正在调用方法对象 args代表这个方法的参数 System.out.println("收尾款 接回star"); return rs; } }); } }
package d9_proxy; /** * FileName: star * Author: lps * Date: 2022/4/26 13:03 * Sign:刘品水 Q:1944900433 */ public class star implements Skill { private String name; public star() { } public star(String name) { this.name = name; } @Override public void jump() { System.out.println(name + "开始跳舞"); } @Override public void sing() { System.out.println(name + "开始唱歌"); } }
package d9_proxy; /** * FileName: Skill * Author: lps * Date: 2022/4/26 13:03 * Sign:刘品水 Q:1944900433 */ public interface Skill { void jump();//跳 void sing();//唱 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix