【AOP】操作相关术语---【Spring】的【AOP】操作(基于aspectj的xml方式)
【AOP】操作相关术语
- Joinpoint(连接点):类里面哪些方法可以被增强,这些方法称为连接点。
- Pointcut(切入点):在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add和update方法,实际增强的方法称为切入点。
- Advice(通知/增强):增强的逻辑,称为增强,比如扩展日志功能,这个日志功能称为增强。
前置通知:在方法之前执行
后置通知:在方法之后执行
异常通知:方法出现异常
最终通知:在后置之后执行
环绕通知:在方法之前和之后执行
- Aspect(切面):把增强应用到具体方法上面,这个过程称为切面,把增强用到切入点过程。
【Spring】的【AOP】操作(基于aspectj的xml方式)
- 在spring里面进行aop的操作,使用aspectj实现。本身不是spring的一部分,是单独的一个框架,只是和spring一起做spring的aop的操作。
- Spring2.0以后增加对aspectj的支持。
- 新版本的spring框架,建议使用aspectj的方法开发aop。
- 使用aspectj实现aop的两种方式:
基于aspectj的xml配置
基于aspectj的注解方式
AOP操作准备工作
- 除了导入基本的jar包之外,还需要导入aop相关的jar包

- 导入AOP的约束
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
使用表达式配置切入点:
1、切入点:实际要增强的办法
2、表达式:execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
- Execution(* com.aop.MyBook.add(..))
- Execution(* com.aop.MyBook.*(..))
- Execution(* *.*.add(..))
- 匹配所有的save开头的方法execution(* save*(..))
代码演示:
第一步创建Book和MyBook两个类
public class Book {
public void book(){
System.out.println("book------");
}
}public class MyBook {
public void before1(){
System.out.println("前置增强----------");
}
}第二步:创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
<!-- 配置对象 -->
<bean id="book" class="com.aop.Book"></bean>
<bean id="mybook" class="com.aop.MyBook"></bean>
<!-- 配置AOP操作 -->
<aop:config>
<!-- 配置切入点 表示对那个方法进行增强 -->
<aop:pointcut expression="execution(* com.aop.Book.*(..))" id="pointcut"/>
<!-- 配置切面 把增强的方法用在哪个方法上面-->
<aop:aspect ref="mybook">
<!-- 配置增强类型 method:增强类里面使用哪个方法作为前置 -->
<aop:before method="before1" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
</beans>第三步:创建测试方法
@Test
public void testService(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext3aop.xml");
Book book = (Book)applicationContext.getBean("book");
book.book();
}测试结果
- 前置增强----------
- book------
2017-08-18 19:12:37
【AOP】操作相关术语---【Spring】的【AOP】操作(基于aspectj的xml方式)的更多相关文章
- Spring的AOP开发入门,Spring整合Junit单元测试(基于ASpectJ的XML方式)
参考自 https://www.cnblogs.com/ltfxy/p/9882430.html 创建web项目,引入jar包 除了基本的6个Spring开发的jar包外,还要引入aop开发相关的四个 ...
- 基于AspectJ的XML方式进行AOP开发
-------------------siwuxie095 基于 AspectJ 的 XML 方式进行 AOP 开发 1 ...
- Spring的AOP开发(基于AspectJ的XML方式)
Spring的AOP的简介: AOP思想最早是由AOP联盟组织提出的.Spring是使用这种思想最好的框架 Spring的AOP有自己实现的方式(非常繁琐). Aspect是一个AOP的框架, Spr ...
- Spring事务管理之声明式事务管理-基于AspectJ的XML方式
© 版权声明:本文为博主原创文章,转载请注明出处 案例 - 利用Spring的声明式事务(AspectJ)管理模拟转账过程 数据库准备 -- 创建表 CREATE TABLE `account`( ` ...
- Spring框架的事务管理之基于AspectJ的XML方式(重点掌握)
1. 步骤一:恢复转账开发环境(转账开发环境见“https://www.cnblogs.com/wyhluckdog/p/10137283.html”) 2.步骤二:引入AOP的开发包3.步骤三:引入 ...
- 基于AspectJ的注解方式进行AOP开发
-------------------siwuxie095 基于 AspectJ 的注解方式进行 AOP 开发 ...
- 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的差别,sql文件导入
1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...
- Spring的AOP基于AspectJ的注解方式开发3
上上偏博客介绍了@Aspect,@Before 上篇博客介绍了spring的AOP开发的注解通知类型:@Before,@AfterThrowing,@After,@AfterReturning,@Ar ...
- Spring的AOP基于AspectJ的注解方式开发2
参考自黑马培训机构 上一篇博客提到了在配置文件中开启aop的注解开发,以及简单使用了@Before,@Aspect 这是为了告诉spring为前置通知和切面类 接下来介绍aop的注解的通知类型,和切入 ...
随机推荐
- Nginx Location规则
Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令 ...
- PAT Basic 1042 字符统计 (20 分)
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...
- 用python实现简单的计算器(加减乘除小括号等)
需求:实现能计算类似 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) ...
- python中使用schedule模块定时执行任务
python中有一个轻量级的定时任务调度的库:schedule.他可以完成每分钟,每小时,每天,周几,特定日期的定时任务.因此十分方便我们执行一些轻量级的定时任务. 代码如下: import sche ...
- RMQ 2d 模板
#include<iostream> #include<cstdio> #include<string.h> #include<string> #inc ...
- Vue props双向绑定
props是不能改变的 项目里遇到一个问题,就是props的组件内是不能改变,就像react中的props值也是不能改变的, 所以我在用的时候竟然忽略了这个点.真的要反省反省, 下面就是这个报错的问题 ...
- jmeter--单个接口通,自动化不通时
单个接口通,自动化不通时,对比两者请求 post 请求的格式,内容编码
- Cassandra 安装部署
Linux 系统安装Cassandra 一.Cassandra需要安装jdk支持,首先安装jdk 自行百度查找安装 二.下载Cassandra 官网地址: https://cassandra.apac ...
- idea万能快捷键,你不知道的17个实用技巧!!!
IDEA里有一个万能快捷键(alt enter),功能非常强大,同一个快捷键,可以根据不同的语境提示你不同的操作,很多人可能还不了解这些功能,在处理代码的时候还手动处理,了解这些技巧之后,你编码也是一 ...
- ubuntu 微信安装
安装过程: 下载最新版本tar.gz压缩包https://github.com/geeeeeeeeek/electronic-wechat/releases/download/V2.0/linux-x ...