---------------------- android培训、java培训、期待与您交流! ----------------------
代理的概念
代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
AOP:
系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面,面向方面的编程(Aspect oriented program ,简称AOP),AOP的目标就是要使交叉业务(安全,事务,日志等功能要贯穿到好多个模块中,所以,它们就是交叉业务)模块化,使用代理技术正好可以解决这种问题,代理是实现AOP功能的核心和关键技术。
动态代理技术
JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理类。
JVM生成的动态类必须实现一个或多个接口,所以,JVM生成的动态类只能用作具有相同接口的目标类的代理。
CGLIB库可以动态生成一个类的子类,一个类的子类也可以用作该类的代理,所以,如果要为一个没有实现接口的类生成动态代理类,那么可以使用CGLIB库。
实现AOP功能的封装与配置
工厂类BeanFactory负责创建目标类或代理类的实例对象,并通过配置文件实现切换。其getBean方法根据参数字符串返回一个相应的实例对象,如果参数字符串在配置文件中对应的类名不是ProxyFactoryBean,则直接返回该类的实例对象,否则,返回该类实例对象的getProxy方法返回的对象。
BeanFactory的构造方法接收代表配置文件的输入流对象,配置文件格式如下:
#xxx=java.util.ArrayList
xxx=cn.itcast.ProxyFactoryBean
xxx.target=java.util.ArrayList
xxx.advice=cn.itcast.MyAdvice
---------------------- android培训、java培训、期待与您交流! ----------------------