静态代理
一个具体的类(Student),一个代理类(StudentsProxy)
public class StudentsProxy implements Person{
Student stu;
public StudentsProxy() {
}
public void giveMoney() {
proxyBefore();
stu.giveMoney();
proxyAfter();
}
public void proxyBefore() {
}
public void proxyAfter() {
}
}
这里并没有直接通过被代理对象来执行giveMoney,而是通过代理对象来代理执行。这就是代理模式。
代理模式最主要的就是有一个公共接口(Person),一个具体的类(Student),一个代理类(StudentsProxy),代理类持有具体类的实例,代为执行具体类实例方法。
动态代理
动态代理(以下称代理),利用Java的反射技术(Java Reflection),在运行时创建一个实现某些给定接口的新类(也称“动态代理类”)及其实例(对象),代理的是接口(Interfaces),不是类(Class)。
在java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过这个类和这个接口可以生成JDK动态代理类和动态代理对象。
Proxy.newProxyInstance(Person.class.getClassLoader(), new Class<?>[]{Person.class}, stuHandler);
人には定めな星がある 綺羅星 明星 流れ星 己の星見えずでも 見上げる私は今日カギに