spring-第十六篇之AOP面向切面编程之Spring AOP
1、上一篇介绍了AspectJ在AOP的简单应用,让我们了解到它的作用就是:开发者无需修改源代码,但又可以为这些组件的方法添加新的功能。
AOP的实现可分为两类(根据AOP修改源码的时机划分):
1>静态AOP实现:AOP框架在编译阶段对程序进行修改,即实现目标类的增强,生成静态的AOP代理类(生成的.class文件已经被修改,需要特定的编译器)。以AspectJ为例,所以AspectJ通常也被称作编译时增强的AOP框架。静态代理因经过编译后,所以性能上略有优势,但需要特殊的编译器。
2>动态AOP实现:AOP框架在运行阶段动态生成AOP代理(在内存中)以实现对目标类的增强。典型的有JDK动态生成代理类、cglib动态生成代理类。
2、spring AOP
spring AOP是动态代理的代表,生成的代理类要么与目标类实现相同的接口,要么是目标类的子类,前者使用的是JDK代理的代理策略,后者使用的是cglib代理的处理策略。spring中的AOP代理由spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。spring默认使用java动态代理来创建AOP代理。spring也可以使用cglib代理,在需要代理类而不是代理接口的时候,spring会自动切换为使用cglib代理。
3、面向切面编程中的一些术语:
切面(Aspect):或者称为切面类,切面用于组织多个Advice(增强处理),Advice放在切面中定义。如aspectjTest项目中的TxAspect.java。
连接点(JoinPoint):程序执行过程中明确的程序执行点,如方法的调用,或者异常抛出点。spring AOP中,连接点总是方法的调用,即围绕着方法调用点。如aspectjTest项目中的连接点表达式。例如aspectjTest项目中如下代码:
pointcut xxxPointcut():execution(* com.lfy.bean.*.*(..));
增强处理(Advice):AOP框架在特定的切入点执行的增强处理。如aspectjTest项目“模拟进行权限检查”的处理代码。处理类型有before、around、after等类型。
切入点(Pointcut):可以插入增强处理(Advice)的连接点。换言之,当某个连接点满足指定的执行点条件要求时,该连接点将被插入增强处理,该连接点也就变成了切入点。每个方法被调用都只是连接点,但该方法属于某个连接点增强处理配置的匹配项,则该方法将被增强处理,该连接点也就变成了切入点,增强了也就是切入了。
如何使用表达式来定义切入点是AOP的核心,spring默认使用AspectJ的切入点语法。
引入:将方法或字段增强到被处理的类中。spring允许将新的接口引入到任何被处理的对象中。例如,可以将一个新接口引入到任何需要被增强的对象中。
目标对象:需要被AOP框架增强的对象。如果AOP框架采用的是动态AOP实现,那么该对象也称作被代理的对象。
AOP代理:被AOP框架(静态/动态)增强后的对象。spring中的AOP代理可以是JDK动态代理,也可以是cglib动态代理,前者为实现接口的目标对象的代理,后者为不实现接口的目标对象的代理。
织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的对象(AOP代理)的过程。织入有两种实现方式--编译时增强(如AspectJ)和运行时增强(如spring AOP)。
4、spring对AOP的支持
spring目前仅支持将方法调用作为连接点(joinpoint),如果需要对成员变量的访问和更新也作为增强处理的连接点,则可以考虑使用AspectJ。
一般开发人员进行AOP开发的步骤有如下3个部分:
1>定义普通业务组件。
2>定义切入点,一个切入点可能横切多个业务组件。
3>定义增强处理,增强处理就是AOP框架为普通业务组件织入(Weaving)的处理业务。
完成切入点的定义以及增强处理的定义,也就完成了AOP的编程,AOP框架将会自动的根据我们的切入点以及增强处理生成AOP代理。
目前高于spring-1.x版本的spring提供2种方式定义切入点和增强处理:
1>基于注解的“零配置”方式:使用@Aspect、@Pointcut等注解来标注切入点和增强处理。
2>基于XML配置文件的管理方式:使用spring配置文件来定义切入点和增强处理。
spring-第十六篇之AOP面向切面编程之Spring AOP的更多相关文章
- spring-第十五篇之AOP面向切面编程之AspectJ框架简单应用
1.去官方网站下载aspectj-1.8.0.jar 2.在jar包目录启动cmd,执行java -jar aspectj-1.8.0.jar,Next 3.检查JAVA_HOME路径是否正确,如果不 ...
- Spring 08: AOP面向切面编程 + 手写AOP框架
核心解读 AOP:Aspect Oriented Programming,面向切面编程 核心1:将公共的,通用的,重复的代码单独开发,在需要时反织回去 核心2:面向接口编程,即设置接口类型的变量,传入 ...
- 特性attribute,声明和使用attribute,应用attribute,AOP面向切面,多种方式实现AOP
1 特性attribute,和注释有什么区别2 声明和使用attribute3 应用attribute4 AOP面向切面5 多种方式实现AOP ---------------------------- ...
- C#使用KingAOP实现AOP面向切面编程一
AOP面向切面编程(Aspect Oriented Programming),是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 实现AOP主要由两种方式,一种是编译时静态植入,优点是 ...
- Spring-05 -AOP [面向切面编程] -Schema-based 实现aop的步骤
一.AOP [知识点详解] AOP:中文名称面向切面编程 英文名称:(Aspect Oriented Programming) 正常程序执行流程都是纵向执行流程 3.1 又叫面向切面编程,在原有纵向执 ...
- 面向切面编程之cglib代理方式
思想: 和上一篇面向切面编程之手动JDK代理方式上的需求和开发模式一样.不同的是目标类没有接口,只有实现类,采用的是spring中提供的Enhancer类继承目标类实现的代理方式. 需要导入的jar包 ...
- spring总结————AOP面向切面总结
spring总结————AOP面向切面 一.spring aop概念 spring aop面向切面编程,java是面向对象的语言. 真正的service层代码 业务逻辑层再处理业务之前和之后都要进行一 ...
- [转] AOP面向切面编程
AOP面向切面编程 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...
- Spring Boot2(六):使用Spring Boot整合AOP面向切面编程
一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop aop全称Aspec ...
随机推荐
- GUI学习之十四——QKeySequenceEdit学习总结
我们在前面总结了3种文本输入控件,这里有一种新的:QKeySequenceEdit,用作对快捷键的采集.结合其内部的API可以实现对自定义快捷键的设置.这节内容大致看一下就好了,我也不知道实际作用有哪 ...
- java并发学习--第七章 JDK提供的线程工具类
一.ThreadLocal ThreadLocal类用于隔离多线程中使用的对象,为ThreadLocal类中传递的泛型就是要隔离的对象,简单的来说:如果我们在主线程创建了一个对象,并且需要给下面的多线 ...
- java Collections.binarySearch 用法
package testCollections; import java.util.ArrayList;import java.util.Collections;import java.util.Co ...
- MongoDB的$作为下标的用法
在MongoDB中有一个非常神奇的符号 "$" "$" 在 update 中 加上关键字 就 变成了 修改器 其实 "$" 字符 独立出现 ...
- 使用 flex 弹性布局 ,相关教程记录
一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box1{ dis ...
- 基于Nginx的https服务
1.HTTPS协议的实现 1.为什么需要HTTPS? 原因:HTTP不安全 1.传输数据被中间人盗用.信息泄露 2.数据内容劫持.篡改 对传输内容进行加密以及身份验证 2.对称加密 非对称加密 3.H ...
- oracle各服务说明及cmd启动启动命令
成功安装Oracle 11g后,共有7个服务,一.这七个服务的含义分别为:1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Sh ...
- 【转】阿里架构总监一次讲透中台架构,13页PPT精华详解
转:https://blog.csdn.net/u011323949/article/details/99542576 本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛, ...
- fedora18 Cannot retrieve metalink for repository: fedora. Please verify its path and try again 解决方法
Cannot retrieve metalink for repository: fedora. Please verify its path and try again 解决方法 执行如下命令: s ...
- Oracle JET(三)Oracle JET 响应布局
Oracle JET 提供了一系列的 CSS 样式以直接使用. Oracle JET CSS样式链接:http://docs.oracle.com/middleware/jet310/jet/refe ...