通知类型 重点: 环绕通知 (XML配置)
前置通知:在切入点方法执行之前执行 <aop:before method="" pointcut-ref="" ></aop:before>
后置通知:在切入点方法正常执行之后值。它和异常通知永远只能执行一个 <aop:after-returning method="" pointcut-ref="" ></aop:before>
异常通知:在切入点方法执行产生异常之后执行。它和后置通知永远只能执行一个 <aop:after-throwing method="" pointcut-ref="" ></aop:before>
最终通知:无论切入点方法是否正常执行它都会在其后面执行 <aop:after method="" pointcut-ref="" ></aop:before>
配置切入点表达式
id属性 用于指定表达式的唯一标识。
expression属性 用于指定表达式内容
此标签写在aop:aspect标签内部只能当前切面使用。
它还可以写在aop:aspect外面,此时就变成了所有切面可用
环绕通知
配置方式:
<!-- 配置通知bean -->
<bean id="txManager" class="com.itheima.utils.TransactionManager">
<property name="dbAssit" ref="dbAssit"></property>
</bean>
<aop:config>
<aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))" id="pt1"/>
<aop:aspect id="txAdvice" ref="txManager">
<!-- 配置环绕通知 -->
<aop:around method="transactionAround" pointcut-ref="pt1"/>
</aop:aspect>
</aop:config>
作用: 用于配置环绕通知
属性:
method:指定通知中方法的名称。
pointct:定义切入点表达式
pointcut-ref:指定切入点表达式的引用
说明:
它是spring框架为我们提供的一种可以在代码中手动控制增强代码什么时候执行的方式。
注意:
通常情况下,环绕通知都是独立使用的
Spring框架为我们提供了一个接口:ProceedingJoinPoint。
该接口有一个方法proceed(),此方法就相当于明确调用切入点方法。
该接口可以作为环绕通知的方法参数,在程序执行时,spring框架会为我们提供该接口的实现类供我们使用。
public Object transactionAround(ProceedingJoinPoint pjp) {
//定义返回值
Object rtValue = null;
try {
//获取方法执行所需的参数
Object[] args = pjp.getArgs();
//前置通知:开启事务
beginTransaction();
//执行方法
rtValue = pjp.proceed(args);
//后置通知:提交事务
commit();
}catch(Throwable e) {
//异常通知:回滚事务
rollback();
e.printStackTrace();
}finally {
//最终通知:释放资源
release();
}
return rtValue;
}
最新文章
- hostingEnvironment与宿主环境
- PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)
- 基本概率分布Basic Concept of Probability Distributions 1: Binomial Distribution
- 预处理prepareStatement是怎么防止sql注入漏洞的?
- 百度和google的区别
- Lua程序设计入门
- ES6最具魔力的特性——生成器
- WebStorm快捷键操作
- Python文件格式化写入
- 【转】弹出可拖动的DIV层提示窗口
- mongodb地理空间索引原理阅读摘要
- 如何在使用了updatepanel后弹出提示信息
- xml约束之schema
- 浅谈UE4引擎
- USACO 2001 OPEN
- Java远程调用邮件服务器,实现邮件发送
- 《跟我学Shiro》学习笔记 第一章:Shiro简介
- Linux(例如CentOS 7)打开TCP 22端口,基于SSH协议
- NE76003单片机调试DS18B20 步骤
- linux 基础命令,未完待续