一、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是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
相关推荐
Spring,面向切面编程AOP例子!AOP(Aspect Oriented Programming)!
Spring-aop面向切面编程实例 日志系统,权限控制等.
关于Spring框架的aop简介
AOP面向切面编程.ppt
aop,面向切面编程
2.1 面向切面编程AOP入门 软件系统中的一些功能需要用到应用程序的多个地方,但是我们又不想在每个点都明确调用它们。日志、安全和事务管理的确都很重要,但它们是否为应该被应用对象主动调用呢?如果让应用对象只...
一直对AOP面向切面编程的理解很模糊的同学可以看看。
aop 面向切面编程 demo,通过一个小案例来讲解,aop在andriod开发中运用
AOP面向切面编程实例,可当作业提交。.net代码亲测,完全正确运行。
spect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的...
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。
AOP面向切面编程的JavaScript实现
面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
aop面向切面编程教学ppt
C# 面向切面编程实例,有兴趣的朋友可以下载研究!
NULL 博文链接:https://countme.iteye.com/blog/1132555
java_AOP面向切面编程
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是...
学习Spring开发的AOP面向切面编程时所需要的jar包,包括com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
NULL 博文链接:https://cdxs2.iteye.com/blog/1942254