java动态代理
package com.example.demo02proxy;
public class Cat implements Ainmal{
@Override
public void say() {
System.out.println("猫猫叫");
}
}
package com.example.demo02proxy;
public interface Ainmal {
public void say();
}
代理关键在于InvocationHandler 中的invoke方法,invoke中的三个个参数是将来调用者的参数proxy method args 原始类通过构造方法传递过来,在invoke中调用Object invoke = method.invoke(t, args)返回,前后可以写新功能
package com.example.demo02proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
**//代理关键在于InvocationHandler 中的invoke方法,invoke中的
//三个个参数是将来调用者的参数proxy method args 原始类通过
//构造方法传递过来,在invoke中调用Object invoke = //method.invoke(t, args)返回,前后可以写新功能**
public class Ihvokation implements InvocationHandler {
Object t;
public Ihvokation(Object t) {
this.t=t;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("代理前");
Object invoke = method.invoke(t, args);
System.out.println("代理后");
return invoke;
}
}
package com.example.demo02proxy;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args) {
ProxyTest proxyTest = new ProxyTest();
Ainmal cat = new Cat();
Ainmal dog= new Dog();
Ainmal getproxy =(Ainmal) proxyTest.Getproxy(dog);
getproxy.say();
}
public Object Getproxy(Object o){
Ihvokation tIhvokation = new Ihvokation(o);
Object o1 = Proxy.newProxyInstance(this.getClass().getClassLoader(), o.getClass().getInterfaces(), tIhvokation);
return o1;
}
}