提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
代理是一种思想,通过一个代理对象去访问目标对象的方法。
一、代理模式
代理模式是一种设计模式,指通过代理对象访问目标对象;在某些时候,不方便修改目标对象的代码,但是又必须在目标对象方法的基础上有一些操作,比如,在不修改业务代码基础上,在框架层面上做一些增强(Spring AOP),我们就可以使用代理,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能,并且不用改动目标对象。
代理在实现上可以分成两种,一种是静态代理,一种是动态代理。
一、静态代理
静态代理就是手动写好代理类,对目标对象进行扩展,一般需要一个接口,目标类和代理类共同实现这个接口。
目标接口
public interface Subject {
public void doSomeThing();
}
目标类
public class RealSubject implements Subject {
@Override
public void doSomeThing() {
System.out.println("doSomeThing...");
}
}
代理类
public class Proxy implements Subject {
Subject subject;
public Proxy(Subject subject) {
this.subject = subject;
}
@Override
public void doSomeThing() {
System.out.println("代理前...");
this.subject.doSomeThing();
System.out.println("代理后...");
}
}
调用方式
public class Call {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.doSomeThing();
}
}
调用结果
二、动态代理
在实现静态代理的过程中就会发现,每个目标类都有一个对应的代理类需要手写,那么是否有更便捷的方式实现代理呢,答案当然是有,那就是动态代理,动态代理是指在运行过程中动态的去生成代理类,方法有几种。
方式一、JDK
java.lang.reflect包中的Proxy和InvocationHandler提供了生成动态代理类的能力。实现方式
总结
提示:这里对文章进行总结: