十三 Spring的通知类型,切入表达式写法
Spring中通知类型:
- 前置通知:目标方法执行之前进行操作,可以获得切入点信息
- 后置通知: 目标方法执行之后进行操作,可以获得方法的返回值
- 环绕通知:在目标方法执行之前和之后进行操作,可以终止目标方法的执行
- 异常抛出通知:在程序出现异常的时候进行的操作,可以返回异常信息
- 最终通知:无论代码是否有异常,总是执行,相当于finally
- 引介通知(了解即可):
切面类:

配置:
测试结果:

环绕通知:目标方法执行之前和之后进行操作(事务管理),可以阻止目标方法的执行




异常抛出通知:程序出现异常的时候进行的操作




最终通知:无论代码是否有异常,总是会执行


引介通知:(了解)
applictionContext.xml
<?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"
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"> <!-- 配置目标对象(被增强对象) -->
<bean id="productDao" class="com.spring4.demo3.ProductDaoImpl"></bean> <!-- 将切面类交给Spring管理 -->
<bean id="myAspect" class="com.spring4.demo3.MyAspectXML"> </bean> <!-- 通过Spring配置对目标类完成代理 -->
<aop:config> <!-- 配置切入点,表达式配置哪些类的哪些方法需要进行增强,*代表任意返回值,...代表任意参数 -->
<aop:pointcut expression="execution(* com.spring4.demo3.ProductDaoImpl.save(..))"
id="pointcut1" />
<aop:pointcut expression="execution(* com.spring4.demo3.ProductDaoImpl.delete(..))"
id="pointcut2" />
<aop:pointcut expression="execution(* com.spring4.demo3.ProductDaoImpl.update(..))"
id="pointcut3" />
<aop:pointcut expression="execution(* com.spring4.demo3.ProductDaoImpl.find(..))"
id="pointcut4" /> <!-- 配置切面 -->
<aop:aspect ref="myAspect"> <!-- 配置前置增强 -->
<aop:before method="checkPri" pointcut-ref="pointcut1" />
<!-- 配置后置增强,设置返回值为result -->
<aop:after-returning method="log4j" pointcut-ref="pointcut2" returning="result" />
<!-- 环绕通知 -->
<aop:around method="around" pointcut-ref="pointcut3"/>
<!-- 异常抛出通知,设置异常信息为ex -->
<aop:after-throwing method="afterThtowing" pointcut-ref="pointcut4" throwing="ex"/>
<!-- 最终通知 -->
<aop:after method="after" pointcut-ref="pointcut4"/> </aop:aspect> </aop:config> </beans>
Java
package com.itheima.spring.demo3;
public class ProductDaoImpl implements ProductDao {
@Override
public void save() {
System.out.println("保存商品");
}
@Override
public void update() {
System.out.println("修改商品");
}
@Override
public void find() {
System.out.println("查找商品");
// int i = 1/0;
}
@Override
public String delete() {
System.out.println("删除商品");
return "赵洪";
}
}
package com.itheima.spring.demo3;
import org.aspectj.lang.ProceedingJoinPoint;
/**
* 切面:切入点和通知的组合
* @author 李腾
*/
public class MyAspectXml {
/**
* 前置通知
* @param joinpoint
*/
public void checkPri(){
System.out.println("权限校验=======");
}
/**
* 后置通知
*/
public void writeLog(Object result){
System.out.println("日志记录======"+result);
}
/**
* 环绕通知
* @throws Throwable
*/
public Object aruond(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("环绕通知=======");
Object obj = joinPoint.proceed();
System.out.println("环绕通知=======");
return obj;
}
/**
* 异常抛出通知
*/
public void afterThrowing(Throwable ex){
System.out.println("异常抛出通知"+ex.getMessage());
}
/**
* 最终通知: 相当于finally代码块
*/
public void after(){
System.out.println("最终通知=====");
}
}
package com.itheima.spring.demo3;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
*测试类
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDemo3 {
@Resource(name="productDao")
private ProductDao productDao;
@Test
public void demo1(){
productDao.save();
productDao.update();
productDao.delete();
productDao.find();
}
}
切入点表达式语法:基于execution函数完成的

十三 Spring的通知类型,切入表达式写法的更多相关文章
- Spring的通知类型,切入表达式写法
转载自 https://www.cnblogs.com/ltfxy/p/9882697.html Spring中通知类型: 前置通知:目标方法执行之前进行操作,可以获得切入点信息 后置通知: 目标方 ...
- spring quartz 的定时器cronExpression表达式写法(转载)
转载来源:https://zhidao.baidu.com/question/240797777248343764.html====================================== ...
- JAVA框架 Spring AOP--切入点表达式和通知类型
一:AOP的相关术语: 1)Joinpoint(连接点):所谓的连接点是指那些可以被拦截点,在spring中这些点是指方法.因为在spring中支持方法类型的连接点. 2)Pointcut(切入点): ...
- 分享知识-快乐自己:Spring切入点的表达式和通知类型
1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...
- 7.Spring切入点的表达式和通知类型
1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...
- Java开发学习(十六)----AOP切入点表达式及五种通知类型解析
一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...
- Spring AOP使用整理:各种通知类型的介绍
2.PersonImpl类的源码 public class PersonImpl implements Person { private String name; private int age; p ...
- spring.net AOP通知类型
上篇介绍了spring.net AOP的基本实现,其中有说到通知类型,首先在这里补充解释一下.最后出一个异常通知的实例,因为他的实现和别的通知有些不一样. 1.拦截环绕通知:在Spring中最基础的通 ...
- spring aop的五种通知类型
昨天在腾讯课堂看springboot的视频,老师随口提问,尼玛竟然回答错了.特此记录! 问题: Spring web项目如果程序启动时出现异常,调用的是aop中哪类通知? 正确答案是: 异常返回通知. ...
随机推荐
- C++ 宏定义创建(销毁)单例
Util.h: #define CREATE_SINGLETON_POINTER(CLASS,INSTANCE,MUTEX) if (NULL == INSTANCE) \ { \ MUTEX.loc ...
- 修改链接服务器 Rpc &Rpc Out
USE [master] GO EXEC master.dbo.sp_serveroption @server=N'LinkName', @optname=N'rpc', @optvalue=N'tr ...
- LeetCode | No.2 两数相加
题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序的方式存储的,并且它们的每个节点只能存储一位数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- What Is A Airless Pump Bottle?
What is an airless pump bottle?Unlike conventional dispensers that use a tube or suction tube to dra ...
- 【转载】巴塞尔问题(Basel Problem)的多种解法
如何计算 \(\displaystyle \zeta \left ( 2 \right )=\frac{1}{1^{2}}+\frac{1}{2^{2}}+\frac{1}{3^{2}}+\cdots ...
- super this 关键字
super 关键字的三种用法: 1.在子类成员方法中,访问父类成员变量 2.在子类成员方法中,访问父类成员方法 3.在子类构造方法中,访问父类构造方法 this 关键字的三种用法: 1.在本类的成员方 ...
- KK音标
目录 KK音标 参考 音标发音 音标口诀 五个规则 KK音标
- 刷题64. Minimum Path Sum
一.题目说明 题目64. Minimum Path Sum,给一个m*n矩阵,每个元素的值非负,计算从左上角到右下角的最小路径和.难度是Medium! 二.我的解答 乍一看,这个是计算最短路径的,迪杰 ...
- 校准产品质量,把控出海航向,腾讯WeTest《2019中国移动游戏质量白皮书》正式开放预约
作者:wetest小编 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:https://wetest.qq.com/lab/view/483.html 每当步入一个新的年份, ...
- Cosmetic Bottles - Cosmetic Packaging: What Are The Characteristics Of Trends?
There are certain differences in products, of which cosmetics are the most obvious. In addition to t ...