如要转载请标明作者zjrodger和出处:http://blog.youkuaiyun.com/zjrodger/,谢谢。
笔记目录
· AOP和动态代理技术简介
(·) 代理的概念和作用
(·) AOP介绍
(·) 如何使用动态代理技术
|
· AOP和动态代理技术简介
(·) 代理的概念和作用
(1)生活中的代理
从联想代理商那里买东西和直接跑到北京联想总部去买东西。
(2)程序中的代理
1)
要为已经存在的多个具有相同接口的目标类(target类)的各个方法增加一些系统功能,例如,异常处理、日志、计算方法的运行时间、
事务管理、等等。
2)
编写一个与目标类具有相同结构的代理类,代理的每个方法调用目标类的相同方法,并在调用方法时加上额外的系统功能的代码。
代理类中的方法名应该与目标类中的方法名相同。
代理类和目标类实现了相同的接口,即代理类和目标类对外具有
相同的方法。
在客户端进行编程时,不是直接引用Target类的方法,也不是直接引用Proxy类的方法,而是引用“接口”。
3) 如果采用工厂模式和配置文件的方式进行管理,则不需要修改客户端程序,在配置文件中配置是使用目标类还是代理类,这样,
以后很容易切换,譬如,想要日志功能时,就配置代理类,否配,就配置目标类,这样,增加系统功能就很容易,以后运行一段时间后,又想去掉系统功能也很容易。
(·) AOP介绍
2. 用具体的程序代码描述交叉业务:
3.交叉业务的变成问题,即为面向方面的编程(Aspect Oriented Programming),简称AOP,
AOP的目标就是要使交叉业务模块化。可以将“
交叉业务切面代码”移动到原始方法的周围,
这与直接在方法中编写切面代码的运行效果是一样的,如下图所示:
【切面代码移动前】 | 【切面代码移动后】 |
4.
交使用代理技术正好可以解决这种问题,代理是实现AOP功能的核心和关键技术。
(·) 如何使用动态代理技术
1. 要为系统中的各个接口的类增加代理功能,那将需要太多的代理类,全部采用静态代理方式,将会是一件非常麻烦
的事情。写成千上百个代理类,非常累。JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用做代理类,即动态代理类。
2. JDK动态代理
只能为接口创建动态代理。
3. JVM实现的动态类必须实现一个或者多个接口(这样就可以知道生成的动态类中都包含哪些方法),所以,JVM生成的动态类只能用于
代理具有相同接口的目标类。
(即如何告诉JVM要动态生成的那个类中都包含哪些方法? 通过让动态类实现一个或者多个类的接口。)
4. CGLIB库可以动态生成一个类的子类,一个类的子类也可以用作该类的代理,所以,如果要为一个没有实现接口的类生成动态代理,
那么可以使用CGLIB库。