动态代理
Proxy
专门完成代理的操作类,是所有动态代理类的父类。通过此类为一 个或多个接口动态地生成实现类
newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)主要通过这个方法创建一个代理类,loader为类加载器,interfaces是被代理类的全部接口,h是Invocation实现类对象,用于处理方法执行逻辑
InvocationHandler
实现InvocationHandler接口它必须实现invoke方法,以完成代理的具体操作
public Object invoke(Object theProxy, Method method, Object[] params) throws Throwable,theProxy为代理类对象
动态代理案例
class ProxyFactory<T> implements InvocationHandler{
private T target;
public ProxyFactory(T target){
this.target = target;
}
public static <B> Object getProxy(B target,Class<?>...interfaces){
return Proxy.newProxyInstance(target.getClass().getClassLoader(),interfaces,new ProxyFactory<B>(target));
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法之前打印");
Object obj = method.invoke(target,args);
System.out.println("方法之后打印");
return obj;
}
}
public static void main(String[] args) {
SendService smsService = new SendService();
MessageSend proxy = (MessageSend) ProxyFactory.getProxy(smsService,MessageSend.class);
proxy.send();
}
/* 输出:
* 方法之前打印
* 正在发送消息
* 方法之后打印
*/

浙公网安备 33010602011771号