码迷,mamicode.com
首页 > 其他好文 > 详细

初识AOP

时间:2015-02-28 11:26:23      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

        最近一直听到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的方式将他调用集中于一点,剥离相同的代码,倒转业务逻辑对他的依赖,现有业务代码可以完全不理会甚至不知道他是如何实现,这就是“单一职责”的设计原则。


初识AOP

标签:

原文地址:http://blog.csdn.net/zuozuo1245/article/details/43982629

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!