首先代码就不附上了,随便一搜就可以找到大量的例子,浅谈一下代理的重要因素,代理的实现,代理的作用概念性的理解:
代理作用:
(静态代理)试想有这么一个公共类(接口),里面有很多方法,如果得到了这个接口的实例就可以调用接口的所用方法,但是,这个公共类又不想让其中一些类调用某些方法, 这时代理模式就出现了,代理类实现了公共类(接口),并全部处理公共类的方法,如果代理类不想让某些类调用到某些方法,代理类只需在改方法内部返回为空, 或者抛出异常等,
总结一句: 为其他对象提供一种代理以控制对这个对象的访问
(静态代理实现)
1. 要有一个接口,接口内声明一些方法,eg: doSomething();
2. 一个或多个class, 这些class 需实现这个接口;
3. 一个代理class,代理class 需实现这个接口;
代理class 在 doSomething() 内部调用 2 中的doSomething 方法, 一般在代理类会根据参数来决定调用哪个 class.
(动态代理)相对于静态代理而言,动态代理控制住了代码量,比如上面3 中, 如果有很多个接口, 你岂不是要创建很多个代理类。
很简单,动态代理类只需要实现InvocationHandler 就可以了,通过 Method.invoke() 反射来调用,在实现InvocationHandler.invoke 里面也可以添加额外的逻辑,
小有点aop 的意思。