实现InvokeHandle接口的类:
package com.zjlolife.dymanic_proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class InvoHandle implements InvocationHandler {
private Object target;
public InvoHandle(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("inhandle中的target"+target);
Object ret = null;
System.out.println("正在执行的方法"+method.getName()+"========");
if(args!=null) {
for(Object arg:args) {
System.out.println("传入的参数"+arg);
}
}
else {
System.out.println("没有传入参数");
}
ret = method.invoke(target, args);
System.out.println(method.getName()+"方法执行完成=========");
return ret;
}
}
生成动态代理对象的类:
package com.zjlolife.dymanic_proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class ProxyFactory {
private InvocationHandler invohandle;
private Object target;
public ProxyFactory(Object target) {
this.target = target;
invohandle = new InvoHandle(this.target);
}
public Object getProxy(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), invohandle);
}
}
一个接口类:
package com.zjlolife.dymanic_proxy;
public interface Animal {
public void walk();
public void sleep();
public String say();
}
实现该接口的类:
package com.zjlolife.dymanic_proxy;
public class Bird implements Animal {
@Override
public void walk() {
// TODO Auto-generated method stub
}
@Override
public void sleep() {
// TODO Auto-generated method stub
}
@Override
public String say() {
// TODO Auto-generated method stub
return "bird叫了";
}
}
测试类:
package com.zjlolife.dymanic_proxy;
public class Client {
public static void main(String [] args) {
Animal bird = new Bird();
Animal animal = (Animal)new ProxyFactory(bird).getProxy();
animal.say();
}
}