Spring AOP(基于xml)

目前主流的AOP框架有两个,分别是Spring AOP和AspectJ。新版本的Spring框架建议使用AspectJ来开发AOP。

专业术语:

  • Aspect(切面):在实际应用中,切面通常是指封装用于横向插入系统功能的类,该类要被Spring容器识别为切面,需要在配置文件中通过<bean>元素指定。

  • JoinPoint(连接点):在程序执行过程中的某个阶段点,它实际上是对象的一个操作,例如方法的调用或异常的抛出。在SpringAOP中,连接点就是指方法的调用。

  • PointCut(切入点):是指切面与程序流程的交叉点,即那些需要处理的连接点。通常在程序中,切入点指的是类或者方法名,如某个通知要应用到所有以add开头的方法中,那么所有满足这个规则的方法都是切入点。

  • Advice(通知增强处理):AOP框架在特定的切入点执行增强处理,即在定义好的切入点初所要执行的代码。可以理解为切面类中的方法,他是切面类的具体实现。

  • Target Object(目标对象):是指所有被通知的对象,也称为被增强对象。如果AOP框架采用的是动态AOP实现,那么该对象就是一个被代理的对象。

  • Proxy(代理):将通知应用到目标对象上,被动态创建的对象。

  • Weaving(织入):将切面代码插入目标对象上,从而生成代理对象的过程。

基于xml的声明式AspectJ

所有的切面、切入点和通知都必须定义在<aop:config>元素内。Spring配置文件中的<beans>元素下可以包含多个<aop:config>元素,一个<aop:config>元素中又可以包含属性和子元素,其子元素包括<aop:pointcut>、<aop:advisor>、<aop:aspect>。在配置时,这三个子元素必须按照此顺序来定义。在<aop:aspect>元素下,同样包含属性和多个子元素,通常使用<aop:aspect>元素及其子元素就可以在XML文件中配置切面、切入点和通知。

  • 配置切面:在Spring的配置文件中,配置切面使用的是<aop:aspect>元素,该元素会将一个一定一号的Spring Bean转换为切面Bean,所以在配置文件中要先定义一个普通的Spring Bean(如上述代码中的myAspect)。定义完成之后,通过<aop:aspect>元素的ref属性即可引用该Bean。
属性名称 描述
id 用于定义该切面的唯一标识名称
ref 用于引用普通的Spring Bean

  • 配置切入点:在Spring的配置文件中,切入点是通过<aop:pointcut>元素来定义的。当<aop:pointcut>元素作为<aop:config>元素的子元素定义时,表示其为全局切点,可以被多个切面共享;当<aop:pointcut>元素作为<aop:aspect元素的子元素时,表示该切入点只对当前切面有效。>
属性名称 描述
id 用于定义该切入点的唯一标识名称
expression 用于指定切入点关联的切入点表达式

在上述配置代码片段中,execution(* com.ssm.aspectj.*.*(..))就是定义切入点表达式。总的意思是匹配com.ssm.aspect保重任意类的任意方法的执行。其中execution是表达式的主体,第一个*是指返回值类型,第二个*是指类名,第三了*是指方法名,都表示任意的 。括号里的..表示任意参数。第一个*与包名之间有空格。

具体实践

Spring AOP Xml配置过程及解释的更多相关文章

  1. spring 5.x 系列第3篇 —— spring AOP (xml配置方式)

    文章目录 一.说明 1.1 项目结构说明 1.2 依赖说明 二.spring aop 2.1 创建待切入接口及其实现类 2.2 创建自定义切面类 2.3 配置切面 2.4 测试切面 附: 关于切面表达 ...

  2. 基于注解的Spring AOP的配置和使用

    摘要: 基于注解的Spring AOP的配置和使用 AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不 ...

  3. spring+mybaits xml配置解析----转

    一.项目中spring+mybaits xml配置解析 一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能 ...

  4. Spring AOP 不同配置方式产生的冲突问题

    Spring AOP的原理是 JDK 动态代理和CGLIB字节码增强技术,前者需要被代理类实现相应接口,也只有接口中的方法可以被JDK动态代理技术所处理:后者实际上是生成一个子类,来覆盖被代理类,那么 ...

  5. spring AOP为什么配置了没有效果?

     spring Aop的配置一定要配置在springmvc配置文件中         springMVC.xml 1 <!-- AOP 注解方式 :定义Aspect --> <!-- ...

  6. spring的xml配置声明以及相应的问题处理

    spring的xml配置声明:  xml配置声明 Code 问题处理 问题1 xml报错: cvc-elt.1: Cannot find the declaration of element 'bea ...

  7. spring中用xml配置构造注入的心得

    spring中用xml配置构造注入时,如果 <constructor-arg> 属性都是 ref ,则不用理会参数顺序 <constructor-arg ref="kill ...

  8. 基于XML配置的spring aop增强配置和使用

    在我的另一篇文章中(http://www.cnblogs.com/anivia/p/5687346.html),通过一个例子介绍了基于注解配置spring增强的方式,那么这篇文章,只是简单的说明,如何 ...

  9. Spring 使用AOP——xml配置

    目录 AOP介绍 Spring进行2种实现AOP的方式 导入jar包 基于schema-based方式实现AOP 创建前置通知 创建后置通知 修改Spring配置文件 基于schema-based方式 ...

随机推荐

  1. 一张图让你看懂 iPhone 各种分辨率问题! #DF

    话不多说,直接看图! Source: paintcodeapp.com

  2. 手势仿QQ侧滑---秀清

    // // SlideViewController.h // qqcehua // // Created by 张秀清 on 15/5/25. // Copyright (c) 2015年 张秀清. ...

  3. An incompatible version 1.1.1 of the APR based Apache Tomcat Native library is installed, while Tomcat requires version 1.1.17

    [问题现象]: 启动Tomcat时报如下类似错误信息: An incompatible version 1.1.12 of the APR based Apache Tomcat Native lib ...

  4. Spring Security Auth/Acl 实践指南

    目录 导语 Web Api Authentication/Authorization 示例接口 添加 Maven 依赖 实现接口 访问接口 认证/鉴权 配置认证/鉴权 添加 Maven 依赖 创建数据 ...

  5. 如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇

    Xamarin 作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称 AGC)也在逐步的支持 Xamarin 的 SDK.认证服务也是 ...

  6. Memory Management in Rust

    程序在运行时需要请求操作系统分配内存以及释放内存,因此,程序员在编写程序时,需要显式(手动)地编写分配和释放内存的代码,或者隐式(自动,由语言保证)地进行内存管理.对于前者,C/C++ 是代表语言,程 ...

  7. 常用文本处理命令 & 三剑客之 sed

    今日内容 文本处理命令 Linux 三剑客之 sed 内容详细 文本处理命令 1.sort : 文件内容排序 默认按照文件隔行内容的第一个字符大小进行排序(默认是升序) 默认输出文本结果 sort [ ...

  8. Solution -「ARC 082D」Sandglass

    \(\mathcal{Description}\)   Link.   一个沙漏内共 \(Xg\) 沙,令初始时上半部分为 A,下半部分为 B.沙漏在 \(r_1,r_2,\cdots,r_n\) 时 ...

  9. .netrar最不安全几个问题总结

    任何有经历的.NET开发人员都知道,即使.NET应用程序具有废物收回器,内存走漏一直会发作. 并不是说废物收回器有bug,而是咱们有多种办法能够(轻松地)导致保管语言的内存走漏. 内存走漏是一个偷偷摸 ...

  10. Python中类的多层继承和多重继承