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一样,是一种编程思想。
分享到:
相关推荐
AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或关注点,如日志记录。切点(Pointcut)定义了在何处应用切面,通常通过方法签名或注解来指定。通知(Advice)是切面实际执行的动作,例如在方法调用前后...
### Spring之AOP介绍 #### 一、AOP概述 面向方面编程(Aspect-Oriented Programming,简称AOP)作为一种编程范式,旨在通过模块化的方式处理横切关注点(Cross-cutting Concerns)。传统的面向对象编程(OOP)虽然...
"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨Spring AOP、相关jar文件以及它们在实际开发中的作用。 首先,我们来看一下提供的文件: 1. aopalliance.jar:这是一...
最后,`实验报告参考文档.docx`和`实验9 Spring核心——AOP.pdf`可能是学习资源,详细解释了如何创建和配置Spring AOP,以及如何在实际项目中应用。文档可能包括步骤指导、代码示例和分析,帮助读者深入理解AOP的...
【Spring AOP介绍1】 Spring AOP,全称为Spring面向切面编程,是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对现有代码进行增强的技术,以实现程序功能的统一控制。AOP的主要目的是降低业务...
总的来说,Spring AOP通过这四个关键的Jar包,结合AspectJ的强大功能和CGLIB的代理机制,为开发者提供了强大的面向切面编程支持,使得我们可以在不侵入原有业务代码的情况下,实现跨切面的关注点管理。
在Spring AOP中,主要有以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,包含pointcut(切点)和advice(通知)两部分。例如,在上述代码中的`PersonProxy`类就是一个切面,它定义了`before()`和...
Spring 的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP),这些特性有助于提高代码的可维护性和可扩展性。 #### 二、面向切面编程 (AOP) 原理与实践 ##### ...
Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...
Spring AOP,即面向切面编程,是Spring框架的核心组件之一,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你...
Spring AOP的核心概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、引入(Introduction)、目标对象(Target Object)、代理(Proxy)和织入(Weaving)。切面是关注点的模块化,比如日志记录是一个...
AspectJ是一种更全面的AOP实现,它不仅提供了在运行时织入增强的方式,还支持编译期和加载期的织入方式,而Spring AOP是与Spring框架高度集成的,并主要面向企业级应用中常见的AOP需求,例如方法执行的织入。Spring ...
在本文中,我们将深入探讨Spring的IOC容器和AOP的核心概念,以及如何进行相关配置。 **依赖注入(IOC)** 依赖注入(Inversion of Control,简称IOC)是Spring框架的核心特性之一,它的主要目标是降低组件之间的...
Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...
在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知...
Spring AOP的核心类包括`org.springframework.aop.framework.ProxyFactoryBean`、`org.springframework.aop.framework.ProxyFactory`、`org.springframework.aop.aspectj.autoproxy.AspectJAutoProxyCreator`等。...
在Spring框架中,AOP(Aspect Oriented Programming,面向切面编程)是其核心特性之一,它允许开发者将关注点从主业务逻辑中分离出来,如日志、事务管理等,形成独立的切面,实现代码的解耦和模块化。本篇将深入探讨...
**Spring中的AOP详解** AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它为开发者提供了在不修改原有代码的情况下,插入新的功能或增强已有功能的能力。AOP的核心概念包括切面...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...
本示例将简要介绍如何在Spring应用中实现AOP,通过实际的代码示例帮助理解其工作原理。 首先,我们要理解AOP的核心概念。AOP是一种编程范式,它允许开发者定义“切面”(Aspects),这些切面封装了特定的关注点,如...