定义
在运行时动态地为实现类创建代理对象,以控制对执行者的访问。
主要构成:
- 功能接口:定义暴露方法。
- 实现类:实现了功能接口,真正处理逻辑的类。
- 扩展类:实现InvocationHandler接口,在实现类成员方法调用前后添加处理逻辑的类。
- 代理类:运行时调用Proxy.newProxyInstance()生成的代理类。
实现
// 功能接口
public interface Service {
void do();
}
// 实现类
public class ServiceImpl {
public void do() {...}
}
// 扩展类
public class ServiceExtender implements InvocationHandler {
public Object invoke(Object proxy, Method method, @Nullable Object[] args) {
// 可以通过反射,获取方法的注解、参数的注解、类型参数
Annotation[] methodAnnotations = method.getAnnotations();
Annotation[][] parameterTypes = method.getParameterAnnotations();
Type[] parameterAnnotationsArray = method.getGenericParameterTypes();
// do something...
return method.invoke(this, args);
}
}
// 获取代理对象
Service service = Proxy.newProxyInstance(
getClassLoader(), // ClassLoder
new Class<?>[] { service }, // 要代理的类的接口的Class对象的数组
new ServiceExtender()); // 扩展类对象