1、接口
public interface ProxyMapper {
String queryUserById(Long id);
}
2、目标对象
public class ProxyMapperTargetObject implements ProxyMapper{
@Override
public String queryUserById(Long id) {
return "执行目标对象";
}
}
3、代理对象
public class ProxyInvocationHandler implements InvocationHandler {
// 目标对象/委托对象
private Object target;
public ProxyInvocationHandler(Object target) {
this.target = target;
}
/**
* @param proxy : 代理对象
* @param method : 目标对象的方法对象
* @param args : 目标对象的方法参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("执行目标对象的方法前");
/**
* 反射方式调用目标对象的方法
* target : 目标对象
* args : 目标对象的方法参数
* result : 目标对象方法的执行结果
*/
Object result = method.invoke(target, args);
System.out.println(result);
System.out.println("执行目标对象的方法后");
return result;
}
}
4、测试代码
public class ProxyService {
public static void main(String[] args) {
// 目标(委托)对象
ProxyMapper targetObject = new ProxyMapperTargetObject();
//
ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler(targetObject);
// 代理对象
ProxyMapper mapperInstance = (ProxyMapper) Proxy.newProxyInstance(ProxyService.class.getClassLoader(),
new Class[]{ProxyMapper.class},
proxyInvocationHandler);
mapperInstance.queryUserById(2L);
}
}
5、代理执行顺序
mapperInstance.queryUserById(2L);
ProxyInvocationHandler#invoke()
ProxyMapperTargetObject#queryUserById()