从静态代理到动态代理理解AOP

一、AOP:

       AOP是一种面向切面的编程思想,它算是一种对我们以往自上而下调用关系的补充或辅助。其实其功能主要为抽取服务,在程序的设计过程中会有类似事务一样的服务,从事务的开启、提交、回滚等一系列的操作,和实际需要的业务逻辑耦合性不是很大的情况下,就可以将其抽取出来,这样做的好处:首先是减少了代码量,从开始的遍布在各个地方的这一套服务,单独抽取出来,让所有需要该服务的地方都用我们抽取出来的这一套服务就可以了;对比Filter过滤器来看就更容易理解了,就是在程序运行过程中将需要提供服务的类或方法拦截下来,然后为其提供这一套服务,之后再通过调用类似doFilter的方法再将拦截下来的方法传递下去。通过以上的分析就可以理解这样操作不仅仅减少了代码量,更重要的是将这种重复性的服务抽取出来后,更加了方便我们对程序流程的控制和后期的维护。

二、静态代理:

       静态代理是最初的一种抽取,其抽取过程是创建一个类,这个类与目标对象实现同一个接口,让这个类面向客户端而不是目标类,当客户端需要操作目标对象时需要先经过这个类,在这个类里就可以实现对统一服务和目标对象方法的控制。但是这种方法存在很多缺陷,首先是随着目标的增多,代理也会增多,而且控制上也没有产生很好的效果,这是在服务改变时不用再改原目标,只需要改变代理类即可,所以控制上还是不太好,这样就可以提出用动态代理去实现该功能。

三、动态代理:

       动态代理在结构设计上与静态代理不用的地方为:动态代理不用我们自己去创建代理,而是通过JAVA虚拟机帮助我们在运行时创建,这样就省去了我们创建代理类的麻烦。利用动态代理需要创建一个操作类,这个类实现了InvocationHandler接口,实现该接口的类就拥有的创建代理和提供相应服务的能力。操作类可以通过createProxyInstance方法创建代理,需要将目标对象作为参数传给该方法,在此需要说明的是,目标对象必须实现了相应接口,因为动态代理的底层实现原理还是获取目标实现的接口,创建实现了该接口的代理类,如果不实现接口,将无法创建代理类。而对于需要提供的服务在invoke方法中进行调用,因为在每次调用目标对象的方法时,都会首先调用操作类的invoke方法,这样就可以将统一服务提取到该方法中作为总控,这样对于服务的切入和撤销相对来说就更容易控制了。

总述:

       对于AOP的应用,主要在于能够从程序中发现这种类似的服务。如有不足之处,望多多指教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值