为其他对象提供一种代理以控制对这个对象的访问。
静态代理是指代理与被代理者的关系在编译期间就确定了
public interface Subject {
void request();
}
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject: handling request.");
}
}
public class Proxy implements Subject {
private final RealSubject realSubject = new RealSubject();
@Override
public void request() {
preRequest();
realSubject.request();
postRequest();
}
private void preRequest() {
System.out.println("Proxy: before request.");
}
private void postRequest() {
System.out.println("Proxy: after request.");
}
}
public class Client {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.request();
}
}
public static void main(String[] args) {
RealSubject target = new RealSubject();
InvocationHandler invocationHandler = (proxy1, method, args1) -> {
System.out.println("before...");
Object result = method.invoke(target, args1);
System.out.println("after...");
return result;
};
Subject subjectProxy = (Subject) Proxy.newProxyInstance(Subject.class.getClassLoader(),
RealSubject.class.getInterfaces(), invocationHandler);
subjectProxy.request();
}
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(RealSubject.class);
MethodInterceptor methodInterceptor = (target, method, objects, methodProxy) -> {
System.out.println("方法前");
Object result = methodProxy.invokeSuper(target, objects);
System.out.println("方法后");
return result;
};
enhancer.setCallback(methodInterceptor);
Subject proxy = (Subject) enhancer.create();
proxy.request();
}