package lost;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Parameter;
public class ed {
public static void main(String[] args) throws Exception{
BigStar jg = new BigStar("jg");
//创建代理人对象,并用代理人对象进行方法调用
Star proxy=ProxyUtil.createproxy(jg);
proxy.dance();
System.out.println(proxy.sing("hhh"));
}
}
package lost;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyUtil {
public static Star createproxy(BigStar bigStar){
Star star =(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 ("sing".equals(method.getName())){
System.out.println("准备话筒");
}else if ("dance".equals(method.getName())){
System.out.println("准备舞台");
}
return method.invoke(bigStar,args);
}
}
);
return star;
}
}
package lost;
public class BigStar implements Star{
//被代理人
private String name;
public BigStar() {
}
public BigStar(String name) {
this.name = name;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
public String toString() {
return "BigStar{name = " + name + "}";
}
@Override
public String sing(String name) {
System.out.println(this.name+"正在唱"+name);
return "谢谢";
}
@Override
public void dance() {
System.out.println(this.name+"正在跳舞");
}
}
package lost;
public interface Star {
//把要代理人帮忙的方法装入接口
public abstract String sing(String name);
public abstract void dance();
}