代理模式在Spring中,运用的淋漓精致,面向切面的编程,变得很有趣
假设有个实际书籍供应商,网上书籍供应商,而网上书籍供应商是代理商
假设有个实际书籍供应商,网上书籍供应商,而网上书籍供应商是代理商
package com.study.proxy;
public interface Subject {
public void sailBook();
}
public class RealSubject implements Subject {
@Override
public void sailBook() {
System.out.println("卖书");
}
}
public class SubjectHandler implements InvocationHandler {
private Object subject;
public void setSubject(Object subject) {
this.subject = subject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (subject == null) {
System.out.println("无权");
return null;
} else {
return method.invoke(subject, args);
}
}
}
客户端使用:
package com.study.proxy;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
Subject subject = new RealSubject();
SubjectHandler handler1 = new SubjectHandler();
handler1.setSubject(subject);
SubjectHandler handler2 = new SubjectHandler();
Subject proxySubject1 = (Subject) Proxy.newProxyInstance(
RealSubject.class.getClassLoader(),
RealSubject.class.getInterfaces(), handler1);
Subject proxySubject2 = (Subject) Proxy.newProxyInstance(
RealSubject.class.getClassLoader(),
RealSubject.class.getInterfaces(), handler2);
proxySubject1.sailBook();
proxySubject2.sailBook();
}
}