当前位置:首页 > 编程笔记 > 正文
已解决

动态代理。

来自网友在路上 137837提问 提问时间:2023-09-22 22:55:46阅读次数: 37

最佳答案 问答题库378位专家为你答疑解惑

无侵入式的给代码增加额外的功能

代理的作用:对象如果干的事情太繁琐,就可以通过代理来转移部分职责;也就是相当于把对象的的方法拆开一些步骤分给代理做,对象做关键的就行了;并且代理做的这些繁琐的事情的名字也要和对象做这件事情的名字一样;

对象和代理要实现同一个接口,接口中就是被代理的所有方法

对象

package com.ln1;import com.FC.Star;public class Goods implements Star {private String name;private String id;private int age;private String rightPassWord = "123456";public Goods() {}public Goods(String name, String id, int age, String rightPassWord) {this.name = name;this.id = id;this.age = age;this.rightPassWord = rightPassWord;}public Goods(String name){this.name = name;}public String sing(String Name){System.out.println(this.name + " sing " + Name);return "thanks";}public void dance(){System.out.println(this.name + "dance");}}

代理

package com.FC;import com.ln1.Goods;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class ProxyUtil {public static Star createProxy(Goods goods){Star star = (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(), //用于指定用哪个类加载器,去加载生成的代理类new Class[]{Star.class},//指定接口,这些接口用于指定生成的代理长什么样,也就是有哪些方法new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//参数1:代理的对象//参数2:要运行的方法//参数3:调用方法时,传递的实参if("sing".equals(method.getName())){System.out.println("收钱,准备话筒");}else if("dance".equals(method.getName())){System.out.println("收钱,准备场地");}return  method.invoke(goods,args);}}//用来指定生成的代理对象要干什么事情);return star;}
}

接口

package com.FC;public interface Star {public abstract String sing(String Name);public abstract void dance();
}

运行代码

package com.FC;import com.ln1.Goods;public class Text {public static void main(String[] args) {Goods goods = new Goods("yoki");Star proxy = ProxyUtil.createProxy(goods);String result = proxy.sing("入睡");System.out.println(result);proxy.dance();}
}

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"动态代理。":http://eshow365.cn/6-11712-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!