十三 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中哪类通知? 正确答案是: 异常返回通知. ...
随机推荐
- vue+axios安装
Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中. 安装方式: 1.使用cdn <script src="https://unpkg.com/axios ...
- python连接Oracle的方式以及过程中遇到的问题
一.库连接步骤 1.下载cx_Oracle模块 下载步骤 工具 pycharm :File--->右键setting--->找到Project Interpreter -----> ...
- 三大查找算法(Java实现)
三大查找算法 1.二分查找(Binary Search) public class BinarySearch { public static void main(String[] args) { in ...
- Python隐藏特性:字符串驻留、常量折叠
下面是Python字符串的一些微妙的特性,绝对会让你大吃一惊. 案例一: >>> a = "some_string" >>> id(a) 140 ...
- 吴裕雄 python 神经网络——TensorFlow 完整神经网络样例程序
import tensorflow as tf from numpy.random import RandomState batch_size = 8 w1= tf.Variable(tf.rando ...
- tensorflow之tensorboard
参考https://www.cnblogs.com/felixwang2/p/9184344.html 边学习,边练习 # https://www.cnblogs.com/felixwang2/p/9 ...
- 7 scrapy 初识
scrapy框架 框架介绍: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化 ...
- 域名和URL各部分组成
什么是域名? 域名,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传 输时标识计算机的电子方位. IP地址是Internet主机的作为路由寻址用的数字型标识,人 ...
- zk的单机部署,与客户端的使用
下载zk wget https://archive.apache.org/dist/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz 安装jdk t ...
- 搭建一个maven管理的ssm项目需要配置那些文件
链接:https://blog.csdn.net/java987654/article/details/80746866