------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
代理(Proxy)
1.要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能。
2.编写一个与目标具有相同接口的代理类,代理类的每个方法调用目标类的相同犯法,并在调用方法时加上系统功能的代码。
3.采用工厂模式和配置文件的方式管理,不需要修改客户端程序,在配置文件中配置是使用目标类,还是代理类,以便切换。
AOP(面向方面的编程)
目标使交叉业务模块化,采用将划面代码移动到原始方法的周围,与直接在方法中编写切面代码的运行效果是一样的。
动态代理技术
1.要为系统各种接口的类增加代理功能,需要太多代理,不能全是静态
2.JVM可在运行期间动态生成类的字节码,这种动态生成的类被用做代理类,即动态代理类
3.JVM生成的动态类必须实现一个或多个接口,所以,JVM生成的动态类只能用作具有相同接口的目标类的代理
4.CGLIB库可以动态生成一个类的子类,一个类的子类也可以用作该类的代理,所以如果要为一个没有实现接口的类生成动态代理类。那么可以使用CGLIB库
5.代理类的各个方法中通常出了要调用目标的相应方法和对外返回目标返回的的结果外,还可以在代理方法中的如下四个位置上加上系统功能代码:
1.调用方法之前2.之后3.前后4在处理异常的catch中
例子:
让JVM创建动态类及实例对象,需要给它提供哪些信息?
1.生成的类有哪些方法,通过让其实现哪些接口的方式进行告知
2.产生的类字节码必须有一个关联的类加载器对象。
3.生成的类中的方法的代码是怎样的,也得有我们提供。把我们的代码写在一个约定好的接口对象的方法中,把对象传给它调用我的方法即插入我的代码。
构造方法接收一个InvocationHandler对象,是为记住这个对象,然后使用它
调用代理涉及三个要素:对象,方法,参数。
切面的代码以对象的形式封装。
给InvocationHandler传递两个对象才能做成框架:目标对象及系统对象。
实现AOP功能的封装与配置
1.工厂类BeanFactory负责创建目标类或代理类的实例对象,并通过配置文件实现切换,其getBean方法根据参数字符串返回一个相应的实例对象,如果参数字符串在配置文件中队形的类名不是ProxyFactionBean,直接返回该类的实例对象,否则返回该类实例对象的getProxy方法的返回对象。
2.BeanFactory的构造方法接收代表配置文件的输入流对象,配置文件格式为键值对
3.ProxyFactionBean充当封装生成动态代理的工厂,需要工厂提供哪些参数信息:目标,通知
4.编写客户端应用:
编写实现Advice接口的类和在配置文件中进行配置。
调用BeanFactory获取对象