package Karl.Demo.DaiLi; public class Test { public static void main(String[] args) { BigStar s=new BigStar("杨超越"); Star star=ProxyUtil.createProxy(s); String rs=star.sing("好日子"); System.out.println(rs); } }
package Karl.Demo.DaiLi; public interface Star { String sing(String name); void dane(); }
package Karl.Demo.DaiLi; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyUtil { //设置createProxy方法 //返回值为Star public static Star createProxy(BigStar bigStar){ /* public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 参数1:用于指定一个类加载器 参数2:指定生成的代理长什么样子,也就是有哪些方法 参数3:用来指定生成的代理对象要干什么事情*/ Star starProxy=(Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(), new Class[]{Star.class},new InvocationHandler(){ @Override//回调方法 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //代理对象要做的事情,会在这里写代码 if (method.getName().equals("sing")){ System.out.println("准备话筒,收钱20万"); }else if (method.getName().equals("dance")){ System.out.println("准备场地,收钱1000万"); } //返回给上面的bigStar参数 return method.invoke(bigStar,args); } }); //返回给上面的starProxy方法 return starProxy; } }
package Karl.Demo.DaiLi; public class BigStar implements Star{ //设置成员变量name private String name; //把传入的name赋值给本类成员变量name public BigStar(String name){ this.name=name; } //重写接口方法 @Override //设置方法传入name public String sing(String name) { //获取本类name获取传入的name System.out.println(this.name+"正在唱:"+name); //返回值 return "谢谢大家!"; } @Override //因为跳舞没有名字所以没有传入name //void表示没有返回值 public void dane() { System.out.println(this.name+"正在优雅的跳舞"); } }
标签:演示,String,流程,代理,System,println,Star,public,name From: https://www.cnblogs.com/Karl-hut/p/17470060.html