接着上一篇 Spring核心(三)IoC使用 往下讲
AOP即Aspect Oriented Programming的,意为面向切面编程,以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP是横向插入的一种技术,我觉得切面这个“切”字用的很准确,很形象。这个感觉就是在不影响业务的总体纵向流程的情况下横向切进了一段逻辑。
具体介绍
AOP涉及到多个术语,这是AOP的核心
1、横切关注点:跨越应用程序多个模块的功能
(软件系统,可看作由一组关注点即业务或功能组成。其中,直接的业务关注点,是直切关注点。而为直切关注点提供服务的,就是横切关注点。)
2.切面(Aspect):横切关注点被模块化的特殊对象
3.通知(Advice): 切面必须要完成的工作
4.目标(Target): 被通知的对象
5.代理(Proxy): 向目标对象应用通知之后创建的对象
6.切入点(PointCut): 切面通知执行的“地点”的定义
7.连接点(Jointpoint): 与切入点匹配的执行点
AOP 的主要编程对象是切面(aspect), 横切关注点抽象(模块化)即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面是横切性关注点的抽象。
这几个术语的描述比较抽象,我们通过一个简单例子来简单说明。
假如我的DAO层在执行增删改的时候需要验证权限,而这个权限的验证跟我真正的业务流是没有关系的,所以我可以把这个权限验证的功能抽出来。这个权限验证的功能或者说业务就是横切性关注点,是我要关注的部分。
然后我把这个功能单独拿出来,写个类。这个类就是切面(Aspect),切面是横切关注点的抽象,模块化。
在切面这个类里,我可以写个方法,这个方法是具体执行权限验证的。这个方法就是我们定义的通知(Advice),描述了具体要执行的工作。
此外,还要说明切入点(PointCut),即我们定义的advice要执行的地方,在这个例子中,切入点(PointCut)就是Dao层里的增删改方法。在切入点(PointCut)中涉及到切入的语法,在这里不再细说,推荐一片博客,里面讲的挺全:http://blog.csdn.net/kjfcpua/article/details/7513273
应用 AOP 编程特点:
仍然需要在定义公共功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类. 这样一来横切关注点就被模块化到特殊的对象(切面)里.
使用AOP起到的作用:
利用AOP横向添加的进去的功能一般与主体业务无关,且复用性高。例如日志记录,性能统计,安全控制,事务处理,异常处理等。
将这些比较公用的逻辑从业务主逻辑代码中划分出来,通过分离,我们可以将它们独立到非主导业务逻辑的单独方法中。
这样就把与对业务逻辑无关的逻辑部分进行隔离,从而改变这些行为的时候不影响业务逻辑的代码。使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时因为高复用而提高了开发的效率。
总结
AOP不仅是Spring的核心,也是OOP思想的延续。AOP是在OOP设计的基础上,针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
所以AOP不是要替代OOP,只是在促使OOP更好,是对OOP的补充。
AOP不仅是技术,她跟OOP一样,是一种编程思想。
分享到:
相关推荐
Spring核心-AOP(9)
Springframework核心技术AOP详细介绍文档.pdf,这份文档比较详细地介绍了Spring框架的一个核心技术AOP,先从理论说起,然后给出典型的例子
springAOP核心源码流程分析,请基于5.0.6版本进行代码跟进。
此下载文件中包含Spring的核心jar文件和AOP的Aspectj所需要的Jar文件。
Spring包(aop包,核心core包,持久核心包Persistence Core),下属三个文件夹.分别包括所述的包,如果有eclipse或myEclipse直接复制到lib导入可用,部署SSH可用.本人测试过.
spring-**core**-4.3.6.RELEASE.jar :包含spring框架基本的核心工具类,spring其他组件都要用到这个包里的类,其他组件的基本核心 spring-**beans**-4.3.6.RELEASE.jar:所有应用都要用到的jar包,它包含访问配置...
this is doc include : Introduction Why Spring ? Spring IOC Spring AOP Spring vs EJB
Aop是Spring的核心技术。通过Aop 实现上层的许多高级功能
Spring的核心:IOC与AOP。IOC是控制反转或依赖注入,AOP是面向切面编程。
springAOP核心源码流程分析,请基于5.0.6版本进行代码跟进。
spring-aop是Spring的另一个核心模块,是AOP主要的实现模块。作为继OOP后对程序员影响最大的编程思想之一,AOP极大地拓展了人们的编程思路。Spring以JVM的动态代理技术为基础,设计出了一系列的AOP横切实现,比如...
非常详细的介绍Spring AOP全栈技术点,开篇帮助同学们进行知识储备,夯实基础就是核心!从Spring AOP概念开始引入,通过Spring AOP代理和判断模式进行,宝库各种模式,不断的深入学习,相信会给同学们带来不一样的...
spring 4.0.0 框架核心包 aopalliance-1.0.jar spring-aop-4.0.0.RELEASE.jar spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0....
spring 核心功能演示项目 1. applicationContext xml方式和注解方式配置 2. pring bean循环依赖。 3. spring bean 启动顺序。 4. BeanDefinition编程式注入到容器。 5. spring aop 打印 6. spring 事务
redis集成spring实现aop.zip redis集成spring实现aop.zip
课程内容非常详细的介绍Spring AOP全栈技术点,开篇帮助同学们进行知识储备,夯实基础就是核心!课程从Spring AOP概念开始引入,通过Spring AOP代理和判断模式进行,宝库各种模式,不断的深入学习,相信会给同学们...
spring-core.jar,commons-logging.jar,spring-aop.jar,spring-beans.jar,spring-context.jar,spring-context-support.jar,spring-core.jar,spring-jdbc.jar,spring-jms.jar,spring-orm.jar,spring-test....
Spring的核心容器是其他模块建立的基础,它主要由Beans模块、Core模块、Context模块、Context-support模块和SpEL(Spring Expression Language,Spring表达式语言)模块组成,具体介绍如下: Beans模块:提供了...
Spring中aop编程所需要的jar包,4个核心包,2个aop包,2个第三方依赖包
如果想使用CGLIB的技术来生成代理对象,那么需要引入CGLIB的开发的jar包,在Spring框架核心包中已经引入了CGLIB的开发包了。所以直接引入Spring核心开发包即可!