Loading

Java实现动态代理

1、实现InvocationHandler接口

这种方式只能针对接口实现类的实例对象。

interface Hello{
public void sayHello();
}

class HelloImpl implements Hello{
public void sayHello(){
System.out.println("Hello");
}
}

public class Main {
public static void main(String[] args) {
Hello hello = (Hello) Proxy.newProxyInstance(
HelloImpl.class.getClassLoader(),
HelloImpl.class.getInterfaces(),
new ProxyInvocationHandler(new HelloImpl()));
hello.sayHello();
}
}

public class ProxyInvocationHandler implements InvocationHandler{
private Object obj;
public ProxyInvocationHandler(Object obj){
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before");
Object result=method.invoke(obj,args);
System.out.println("after");
return result;
}
}

表面上操作的对象是接口的对象,但实际在ProxyInvocationHandler中,操作得是Hello接口的实现类的对象。

2、CGLIb

需要手动添加依赖,但实现动态代理不局限于接口。

posted @ 2022-04-19 21:41  吉比特  阅读(432)  评论(0)    收藏  举报