初识AOP

        最近一直听到AOP,他到底是个什么东西,经过这几天查资料,大概有个了解。他的全称:Aspect Oriented Programming  (面向切面编程)。初步理解为:AOP就是“高内聚,低耦合”的一种实现,它实现了调用者与被调用者之间的解耦合。

AOP的由来:

    假设现在系统有三个方法,现在要给该三个方法都加上一段相同的代码,可以是都加上事物或者日志啥等。最开始可能是如下的实现方式:

          

    但是,如果有一天,那段相同的代码段需要修改,那就要打开 3 个地方的代码进行修改,如果不是3 个地方包含这段代码,而是 100 个、甚至是1000 个地方包含这段代码段,那后果想想就累得慌。于是我们做如下的改动:

             

    这样,看似解决了上面的面对,再出现上面的变动,我们只要修改那个提出来的公共的方法就OK。但是如果有一天,客户要去掉上面的那段代码,我不加事物或日志了,我想加权限,这时是不是还是得修改每个方法的那句调用的代码,仍然违反了开发的“开发封闭”原则。这时就有人提出了:我们只要定义该方法,无须在方法 1、方法 2、方法 3中显式调用它,系统会“自动”执行该特殊方法,这样就解耦了,方法1、方法2、方法3自己干自己的事就行,大家所有都互不打扰。于是就有了:

              

AOP框架

1.AspectJ

    静态AOP,是最为成熟、语意最完整的AOP方案,是对java的扩展,依靠编译器实现编译时织入或加载时织入,构建时麻烦,但执行效率高(直接操作字节码),不受应用类型限制,可选择代码和注解两种方式,代码方式更为强大和灵活(注解方式仅为代码方式功能的子集)。

2.SpringAOP

    动态AOP,通过拦截器拦截目标代码,使用自动代理改变目标代码行为,构建简单,运行时需做更多工作,在切入点定义的灵活性和粒度不如AspectJ,但使用极为简化,可与AspectJ紧密集成取长补短,对于不能很好实现的操作可无缝回退到AspectJ实现,属于Spring框架部分,为Spring实现事务管理。


    总结:AOP打破对象层次的界限,将共通关切点集中到一起,剥离单一职责代码,让程序结构更清晰。例如刚刚的那段相同的代码功能,非常“侵入式”,核心业务逻辑和他的逻辑混合,难以更新。而使用AOP的方式将他调用集中于一点,剥离相同的代码,倒转业务逻辑对他的依赖,现有业务代码可以完全不理会甚至不知道他是如何实现,这就是“单一职责”的设计原则。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值