一、静态代理
interface Subject {
void request();
}
class RealSubject implements Subject {
@Override
public void request() {
System.out.println("执行业务逻辑...");
}
}
class StaticProxy implements Subject {
private Subject subject;
public StaticProxy(Subject subject) {
this.subject = subject;
}
@Override
public void request() {
System.out.println("业务逻辑执行前...");
subject.request();
System.out.println("业务逻辑执行后...");
}
}
public class StaticProxyTest {
public static void main(String[] args) {
Subject proxy = new StaticProxy(new RealSubject());
proxy.request();
}
}
二、动态代理
1. 使用JDK自带的接口实现
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface Subject {
void request();
}
class RealSubject implements Subject {
@Override
public void request() {
System.out.println("执行业务逻辑...");
}
}
class DynamicProxy implements InvocationHandler {
private Object target;
public Object bind(Object target) {
this.target = target;
// 取得代理对象
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
System.out.println("业务逻辑执行前...");
result = method.invoke(target, args);
System.out.println("业务逻辑执行后...");
return result;
}
}
public class DynamicProxyTest {
public static void main(String[] args) {
Subject proxy = (Subject)new DynamicProxy().bind(new RealSubject());
proxy.request();
}
}
2.