代理
静态代理
x和a都有一样的接口,x传入了a,x做事其实还是调用自己内部的a
缺点:代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。所以代理对象只服务于一种类型的对象。
动态代理
局限性:被代理类必须实现接口,只能当作父类对象
步骤:Proxy的静态方法+Invocation接口,实现invoke方法
arsg是用到原来的参数,但是现在还没搞懂返回值是干嘛的
class MyInvoHandler implements InvocationHandler {
Object target;
public MyInvoHandler(Object target) {
this.target = target;
}
public void myMethod(){
System.out.println("11");
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("先洗手");
method.invoke(target,args);
return "这是什么?";
}
}
class Test1{
public static void main(String[] args) {
Stu stu = new Stu();
MyInvoHandler myInvoHandler = new MyInvoHandler(stu);
Human stu1 = (Human) Proxy.newProxyInstance(stu.getClass().getClassLoader(),
stu.getClass().getInterfaces(),
myInvoHandler);
}
}