Spring中的AOP基本思想

AOP是Aspect Oriented Programming的缩写,即面向切面编程。

设计模式所追求的是降低代码之间的耦合度,增加程序的灵活性和可重用性,AOP实际上就是设计模式所追求的目标的一种实现。所谓的分离关注就是将某一通用的需求功能从不相关的类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。

  面向对象的编程(OOP)方法是在面向过程的编程方法基础上进行的改进,而面向方面编程(AOP)方法又是在面向对象编程(OOP)方法的基础上进行改进而来的一种创新的软件开发方法。AOP和OOP虽然在字面上十分相似,但是却是面向不同领域的两种设计思想。OOP(面向对象编程)针对问题领域中以及业务处理过程中存在的实体及其属性和操作进行抽象和封装,面向对象的核心概念是纵向结构的,其目的是获得更加清晰高效的逻辑单元划分;而AOP则是针对业务处理过程中的切面进行提取,例如,某一个操作在各个模块中都有涉及,这个操作就可以看成“横切”存在于系统当中。在许多情况下,这些操作都是与业务逻辑相关性不强或者不属于逻辑操作的必须部分,而面向对象的方法很难对这种情况做出处理。AOP则将这些操作与业务逻辑分离,使程序员在编写程序时可以专注于业务逻辑的处理,而利用AOP将贯穿于各个模块间的横切关注点自动耦合进来。AOP所面对的是处理过程中的某个步骤或阶段,对不同的阶段领域加以隔离,已获得逻辑过程中各部分之间低耦合性的隔离效果,其与面向方面编程在目标上有着本质的差异。AOP的核心思想就是将应用程序中的业务逻辑处理部分同对其提供支持的通用服务,即所谓的“横切关注点”进行分离,这些“横切关注点”贯穿了程序中的多个纵向模块的需求。

在AOP中,代理又分为静态代理和动态代理.对于目前版本的JDK来来,代理都是针对接口的. 所谓静态代理,是指代理类和被代理类都实现同样的接口,实际使用中将被代理类注入到代理类中,因为实现了相同的接口,从而操作代理类来完成对被代理类的操作.很显然这种方法过于死板,实际中并不采用.
 在JDK1.3以后,java类库里加入了开发动态代理的API.所谓动态代理,简单的理解,就是代理类和被代理类不用在实现同一接口.这就增强了代理的使用范畴了. 动态代理类必须实现java.lang.reflect.InvocationHandler接口,这个接口有两个重要方法,即public Object bind(Object delegate),public Object invoke(Object proxy,Method method,Object[] args).  bind方法负责将被代理对象绑定,并通过java.long.reflect.Proxy.newProxyInstance(delegate.getClass().getClassLoader(),delegate.getClass().getInterfaces(),this)方法创建一个代理对象.很明显,该方法的第二个参数是一个接口类型,所以被代理类一定要实现一个接口,也就是说这里的代理只能是对接口代理(对类的代理需要cglib的支持).完成代理对象后,以后操作时就会调用invoke方法,该方法会传入被代理对象的方法名和参数,并由method.invoke(delegate,args)完成被代理对象的方法的执行,并返回被代理对象方法实际返回的值.明白以上原理后,我们就可以将日志,权限等切面工作放到代理类中执行,从而实现AOP编程.

注:【耦合度】=》模块耦合度是指电脑程序中模块之间互相依赖的量度。一般说来模块间的耦合度越松越好,以保证模块间共用信息尽量少,降低系统的复杂性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值