在客户和目标类(目标类是指能实现目标功能的类)之间增加代理,
1.可以扩展目标类的功能。
2.隔离客户和目标的直接依赖关系。
3.代理和目标类要实现相同的接口,来保证目标类提供的功能,代理都能够提供,只是功能上有增强。
4.使用工厂模式和配置文件方式,随时可以修改客户是依赖于代理,还是依赖于目标类,或者依赖于其他新的代理。
代理和目标类之间的关系可以是依赖关系,也可以是继承关系,(其实还可以把目标类中的功能全部重新实现一边,只是这种方法基本不用,因为代码不易修改)这两种实现方法都可以。他们的优劣是什么呢??
在java虚拟机运行时期,动态生成的类,叫做动态类。如果这个类是用来做为代理类的,那么就叫动态代理类。 JVM 生成的动态类必须实现一个或者多个接口,也就是 JVM 对于动态生成类,采用接口这个标准,这也符合了面向对象设计原则:依赖接口编程。
CGLIB 可以让虚拟机动态生成某个类的子类,所以如果目标类没有实现借口,要动态生成这个类的代理类,就只能使用继承关系和 CGLIB 来实现。
代理增强部分的功能,可以放在调用目标方法之前,之后,之前之后都加,还有就可以放在 ry 目标方法后 的 catch 和 finally 代码块中。