发表于: 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基础


返回列表 返回列表
评论

    分享到