代理模式之静态代理的简单实现---理解AOP(面向切面编程)的前奏---想要理解AOP,必须先理解一下
2016-10-09 16:28
746 查看
Aspect Oriented Programming 面向切面编程。
解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。
具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流。
(汉字就是这么绕,一会看代码的注释,就很详细的解释这句话)
AOP 主要是利用代理模式的技术来实现的。
先看类继承图:
![](https://img-blog.csdn.net/20161026175648015)
target obj 还被代理类引用,即代理类内部有target obj的引用。图上忘记画了。
这样实现的好处是:本来需要target obj 去完成的事,现在可以让代理类来干。(隐藏了具体实现类,然后只能看到代理类。)
目标接口:后面2个对象都要实现这个接口,即面向接口编程思想
目标对象类:实现目标接口
代理对象类:也实现目标接口,但是还包含目标对象的引用。
测试类:
然后就是,AOP的示意图:
![](https://img-blog.csdn.net/20161009162557378)
以上就是静态代理的简单实现:
不好的地方就是静态。
解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。
具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流。
(汉字就是这么绕,一会看代码的注释,就很详细的解释这句话)
AOP 主要是利用代理模式的技术来实现的。
先看类继承图:
target obj 还被代理类引用,即代理类内部有target obj的引用。图上忘记画了。
这样实现的好处是:本来需要target obj 去完成的事,现在可以让代理类来干。(隐藏了具体实现类,然后只能看到代理类。)
目标接口:后面2个对象都要实现这个接口,即面向接口编程思想
package lxk.aop; /** * 目标接口: * 包含目标方法的声明 */ public interface TargetInterface { /** * 目标方法 */ void business(); }
目标对象类:实现目标接口
package lxk.aop; /** * 目标对象类实现目标接口. * 继而实现目标方法。 */ public class TargetObject implements TargetInterface { /** * 目标方法(即目标操作) */ @Override public void business() { System.out.println("business"); } }
代理对象类:也实现目标接口,但是还包含目标对象的引用。
package lxk.aop; /** * 代理对象类也实现目标接口 * 继而实现目标方法。 */ public class ProxyObject implements TargetInterface { /** * 面向接口编程,这个target其实指的是目标对象 * MainTest测试的时候,传入的就是目标接口的实现类的对象。 */ private TargetInterface target; /** * 构造方法,代理对象得到真实的目标对象 * 即:给真实目标对象赋值 */ public ProxyObject(TargetInterface target) { this.target = target; } /** * 在目标类的目标方法的上下文加一些内容 * * 代理对象和真实对象的方法名是相同的,但是相对目标对象的目标方法,得到了扩展。 * 对外看来,使用方式是一致的,都调用同 一方法名。 * 类似生活中: * 商店买的和直接厂家买的东西都是一样的。 * 厂家买:直接OK; * 商店买:这个税,那个税,这个程序,那个程序。前前后后加了很多包装 * 只是经历的程序不一样,走的程序的多少的问题。代理一词来源于生活。 * 代理看似麻烦,但是却解决了很多问题。解耦,分工明确。 * 你不用到工厂去买你想要的东西。 * 工厂也不用管一些乱七八糟的东西。 * * AOP:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流。 * 具体看下示意图:注释不好整,就在下面截图啦。 */ @Override public void business() { System.out.println("aaaaa");//切面方法a(); //。。。 this.target.business();//目标类的目标方法(横向业务流:对应示意图的5();) //。。。 System.out.println("bbbbb");//切面方法f(); } }
测试类:
package lxk.aop; public class MainTest { public static void main(String[] args) { //横向业务流:方法1(); //。。。 TargetInterface proxy = new ProxyObject(new TargetObject()); proxy.business();//代理对象来代理目标对象,执行目标方法。 //。。。 //横向业务流:方法7(); } }
然后就是,AOP的示意图:
以上就是静态代理的简单实现:
不好的地方就是静态。
相关文章推荐
- 代理模式之静态代理的简单实现---理解AOP(面向切面编程)的前奏---想要理解AOP,必须先理解一下
- 代理模式之静态代理的稍微复杂实现---理解AOP(面向切面编程)---以具体实例来理解AOP概念
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- AOP面向切面编程的简单动态代理实现
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- 简单理解AOP(面向切面编程) 简单理解IoC与DI
- 通过CGLIB实现AOP的浅析(顺便简单对比了一下JDK的动态代理)
- Java利用动态代理模拟实现Spring的AOP(面向切面编程)功能的小实践
- 简单理解AOP(面向切面编程)
- CGLIB实现AOP代理的测试类,与Spring分离,加深对面向切面编程的理解
- 简单理解AOP --- 基础知识之代理模式
- 第37天(就业班) 静态代理与动态代理、oglib代理、手动实现aop编程、注解实现AOP编程、aop相关的几个注解、xml实现aop、切入点表达式、spring对aop模式
- 通过CGLIB实现AOP的浅析(顺便简单对比了一下JDK的动态代理)
- 代理模式及简单AOP实现
- 简单理解AOP(面向切面编程)
- 代理模式,简单(静态)工厂模式,单例模式,模板方法模式个人理解
- 简单理解AOP(面向切面编程)
- 简单理解AOP(面向切面编程)
- Spring AOP-->面向切面编程简单理解和简单使用
- 简单理解AOP(面向切面编程)