直接上代码
接口:
package jdkProxy;
public interface Magic {
public void attack();
}
接口实现类:
package jdkProxy;
public class MagicImpl implements Magic{
@Override
public void attack() {
// TODO Auto-generated method stub
System.out.println("MacigImpl->attack");
}
}
代理类:
package jdkProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MagicProxy implements InvocationHandler{
private Object target;
public Object createMagic(Object object){
this.target=object;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
/**
* method.invoke的第一个参数是target而不是参数中的proxy
* 事实上在这个方法中调用proxy的方法(包括toString等)都会内存溢出,原因还没弄懂
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
// System.out.println(proxy.toString());
System.out.println("begin======");
Object result=method.invoke(target, args);
System.out.println("end========");
return result;
}
}
package jdkProxy;
public class MagicTest {
public static void main(String[] args) {
MagicProxy magicProxy=new MagicProxy();
Magic magic=(Magic)magicProxy.createMagic(new MagicImpl());
magic.attack();
}
}
本文通过一个具体的示例展示了如何使用Java动态代理创建接口的代理对象并实现特定功能。首先定义了一个名为Magic的接口及其实现类MagicImpl,然后创建了一个代理类MagicProxy,该类实现了InvocationHandler接口并重写了invoke方法。最后,在测试类MagicTest中,通过代理类创建了接口Magic的代理实例,并调用了其attack方法。
1492

被折叠的 条评论
为什么被折叠?



