发表于: 2017-01-18 21:27:40
1 1974
今天完成的事情:
一 简述代理模式
代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。
1.静态代理
可以做到再不修改目标对象的前提下,对目标对象进行扩展,代理对象要实现与目标对象一样的接口。
2.动态代理
代理对象不需要实现接口。
代理对象的生成是利用JDKAPI,动态的在内存中构建代理对象 (需指定创建 代理对象/目标对象 实现的接口类型)
JDK中生成代理对象的API:
|-- Proxy
static Object newProxyInstance(
ClassLoader loader, 指定当前目标对象使用类加载器
Class<?>[] interfaces, 目标对象实现的接口的类型
InvocationHandler h 事件处理器
)
3.Cglib代理
也叫子类代理,在内存中构建一个子类对象从而实现对目标对象功能的扩展
JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口,如果想代理没有实现接口的类,就可以使用CGLIB实现。
代理的类不能为final
目标对象的方法也不能为final/static
二 AOP编程(面向切面编程)
有一些东西比如日志、安全、性能、事务等可以称为是非功能需求,是许多业务模块都需要的,如果每个模块里面都重复写会是巨大的浪费。
如何解决:
1.最简单的办法就是把这些通用模块抽象成接口,程序员可以调用。但是这样仍然会有相当多的重复代码。
2.模板方法:父类中把这些通用的东西都写好了,让子类去实现。 缺点:子类不能选择要实现哪些功能,以及执行顺序,只能被动接受。
3.AOP 关注点与业务点完全分隔 在运行期,业务类加载以后,通过代理技术为业务类生成一个代理类,把“切面”代码放到代理类中。
注解和xml方式均可实现
明天计划的事情:
复习Java基础
评论