一、AOP简介
- AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面(切面)编程
- 它将分布在各个类中具有相同功能的代码片段整合到一起,由单独的功能模块完成
- 不仅减少了代码的重复量,降低了耦合性,也提高了代码的可维护性
- AOP的作用就是在可以顺序执行的程序中
- 插入某些特殊的逻辑来实现一些特殊的功能
- 如:日志,事物,安全等都可以很方便的使用AOP来实现
- 不要认为AOP会取代OOP,它只是OOP的补充
- 但就像当年的OOP一样,它很可能引发一场软件产业的革命
- AOP把软件系统分成两部分:核心关注点和横切关注点
- 所谓核心关注点,是业务处理的主要流程,也就是说这个解决方案要做的事
- 所谓横切关注点,是与核心关注点无关的部分,常常发生在核心关注点的多处,而各处基本相似,如日志,权限等
- AOP的核心思想是将应用程序中的商业逻辑和对其进行支持的通用服务进行分离
- 目前,宣称能够支持AOP的项目已达近百种
- java语言的实现也有20多种,其中最为完善的是AspectJ
二、AOP术语
- 切面(Aspect):从对象中抽取出来的横切性功能模块。类似于OOP中的一个类。由通知和切入点两部分组成
- 通知(Adivice):切面的具体实现,例如具体的日志操作代码,一般是切面中的某个方法
- 连接点(Joinpoint):目标对象中插入通知的地方。即advice的应用位置。spring中只支持是方法
- 切入点(Pointcut):切面的一部分,对应一个表达式,定义了advice应该被插入到什么样的Joinpoint点上,即advice的应用范围
- 目标对象(Target Object):被通知的对象
- 代理(AOP Proxy):由AOP框架创建的目标对象的代理对象。是被插入了advice的Target Object
- 织入(Weaving):将通知与目标对象结合在一起,生成新的对象的过程。新的对象就是AOP Proxy。Spring是在运行时完成织入工作的
- 引入(Introduction):为已经存在的类添加新方法和属性,从而达到修改对象内部结构的目的
三、AOP实现技术
- Spring使用两种机制实现AOP技术
- 一是使用java的动态代理,即java.lang.reflect.Proxy类创建代理(注解方式和配置方式两种实现手段)。
- 二是使用CGLIB库自动生成目标对象的子类,同时织入通知
- 动态代理要求目标对象必须要实现接口(只有这样才能创建代理),而CGLIB则没有这种限制
- 目前AOP还没有完全的统一标准,因此实现出来的AOP框架也是多种多样的,为此人们成立了一个AOP联盟,用于统一这种混乱局面
四、注解方式实现AOP
- 加入aspect注解
- 编写pointcut方法并添加注解
- 编写advice方法并添加注解
- 修改spring配置文件
- 启用aspectJ对anotation的支持
- 配置切面类和目标对象类
五、配置文件实现AOP
- 编写aspect类,只需advice即可
- 修改spring配置文件
- 配置<aop:config>
- 配置<aop:aspect>指定切面类
- 配置<aop:pointcut>指定哪些对象的那些方法订阅切面
- 配置advice如:<aop:before><aop:after>等
六、CGLIB实现AOP
- spring对AOP的支持
- 如果目标对象实现了接口,默认情况下采用JDK动态代理实现AOP
- 如果目标对象实现了借口,可以强制实用CGLIB实现AOP
- 如果目标对象没有实现接口,自动采用CGLIB库实现AOP
- 如何强制使用CGLIB实现AOP?
- 在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>
- JDK动态代理和CGLIB字节码生成的区别?
- JDK动态代理只能对实现了接口的类生成代理,而不能针对类
- CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
相关推荐
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架的重要组成部分,它提供了一种在不修改原有业务代码的基础上,插入额外功能的编程模型。Spring AOP使得开发者能够更方便地实现如日志记录、事务管理、...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...
### 面向切面编程(AOP) 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高模块化程度,通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,使得代码更加清晰、...
面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种优雅的方式来处理系统的横切关注点,如日志、事务管理、性能监控和权限控制等。在Spring中,AOP主要通过代理模式实现,...
AOP面向切面编程.ppt
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将系统中的关注点分离,使得代码更加模块化,易于维护和扩展。在传统的面向对象编程(OOP)中,业务逻辑往往与日志、事务管理、权限控制等横...
面向切面编程(AOP)是一种编程范式,它旨在将关注点分离,使得系统中的核心业务逻辑与系统服务(如日志、事务管理、权限控制等)可以解耦。在Android开发中,AOP的应用可以帮助我们更好地组织代码,提高可维护性和...
面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...
spect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的...
### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...
在Spring框架中,面向切面编程(AOP)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。本篇文章将深入探讨如何使用Spring的动态代理机制实现AOP...
面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高软件的模块化程度,通过将关注点分离到不同的“切面”中来实现。在.NET环境中,AOP通常通过拦截器(Interceptor)或动态代理...
总的来说,面向切面编程AOP是一种强大的工具,用于管理横切关注点,它使我们能够编写更加模块化、可重用的代码,特别是在大型企业级应用中,如Web开发,它可以极大地提升代码质量和开发效率。通过合理使用AOP,我们...
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。
面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和复用性。在Android开发中,AOP常用来处理横切关注点,如日志记录、性能监控、事务管理等,这些关注点往往分散在多个类和方法中。AOP通过将这些通用逻辑...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
面向切面编程(Aspect-Oriented Programming,简称 AOP)是一种编程范式,它通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,并将其封装为独立的组件,来降低软件系统的耦合度。AOP 的核心思想是...
拦截器(Interceptor)是Struts2的核心特性之一,它基于AOP(面向切面编程)思想,提供了对请求处理过程的灵活控制。在本篇文章中,我们将深入探讨Struts2的拦截器机制以及AOP的概念。 **AOP(面向切面编程)**是一...
aop面向切面编程教学ppt
面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,旨在将系统中的关注点分离,提高代码的可重用性、可维护性和模块化。在C#中,我们可以利用Unity、PostSharp或者.NET框架自带的System.Interactive...