SpringAOP配置要点
一、基于配置文件
1、关于aop配置文件相关
<!--配置aop-->
<aop:config>
<!--配置切入点表达式-->
<aop:pointcut id="aspect_method"
expression="execution(* service.Impl.AccountServiceImpl.save())"></aop:pointcut>
<!--配置aop切面-->
<aop:aspect id="logAdvice" ref="log">
<!--配置通知类型,并建立通知方法和切入点方法的关联-->
<!--配置前置通知 在切入点方法执行之前执行-->
<aop:before method="beforeAdvice" pointcut-ref="aspect_method"></aop:before>
<!--配置后置通知 在切入点方法执行之后且不发生异常执行-->
<aop:after-returning method="afterReturnAdvice" pointcut-ref="aspect_method"></aop:after-returning>
<!--配置异常通知 在切入点方法发生异常时执行,此时不会执行异常通知-->
<aop:after-throwing method="afterThrowsAdvice" pointcut-ref="aspect_method"></aop:after-throwing>
<!--配置最终通知 不管切入点方法是否发生异常都会执行-->
<aop:after method="afterAdvice" pointcut-ref="aspect_method"></aop:after> <!--配置环绕通知-->
<aop:around method="aroundLog" pointcut-ref="aspect_method"></aop:around>
</aop:aspect>
</aop:config>
2、切面类模板范例
package utils; import org.aspectj.lang.ProceedingJoinPoint; /**
* @Classname Logger
* @Description TODO
* @Date 2020/9/21 15:23
* @Created by Administrator
*/
public class Logger {
public void beforeAdvice() {
System.out.println("前置通知记录日志...");
} public void afterReturnAdvice() {
System.out.println("后置通知记录日志...");
} public void afterThrowsAdvice() {
System.out.println("异常通知记录日志...");
} public void afterAdvice() {
System.out.println("最终通知记录日志...");
} public Object aroundLog(ProceedingJoinPoint pjp){
Object rtValue=null;
try {
Object[] args = pjp.getArgs();
System.out.println("前置通知记录日志...");
rtValue = pjp.proceed(args);
System.out.println("后置通知记录日志...");
return rtValue;
} catch (Throwable throwable) {
System.out.println("异常通知记录日志...");
throwable.printStackTrace();
}finally {
System.out.println("最终通知记录日志...");
}
return rtValue;
}
}
3、切入点表达式写法
切入点表达式的写法:
1、标准写法
权限修饰符 返回值类型 包名.包名.包名..包名.类名.方法名(参数)
eg:public void service.Impl.AccountServiceImpl.save()
2、省略权限修饰符
返回值类型 包名.包名.包名..包名.类名.方法名(参数)
eg:void service.Impl.AccountServiceImpl.save()
3、返回值可使用通配符代替,表示任意类型
* 包名.包名.包名..包名.类名.方法名(参数)
eg:* service.Impl.AccountServiceImpl.save()
4、包名可使用通配符表示任意包名
1)* *.*.*.*.类名.方法名(参数)
2)* *..*.类名.方法名(参数)
5、参数列表
基本类型直接写名称 int
引用类型写包名.类名形式 java.lang.String
使用通配符*表示有参数
使用..表示有无参数均可
6、全通配
* *..*.*.*(..)
二、基于注解配置
1、配置类
package sun.config; import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy; /**
* @Classname SpringConfig
* @Description TODO
* @Date 2020/9/21 16:55
* @Created by Administrator
*/
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "sun")
public class SpringConfig { }
2、切面类注解范例
package sun.utils; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component; /**
* @Classname Logger
* @Description TODO
* @Date 2020/9/21 15:23
* @Created by Administrator
*/
@Component("log")
@Aspect
public class Logger {
@Pointcut("execution(* sun.service.Impl.AccountServiceImpl.save())")
private void aspect_method() {
} // @Before("aspect_method()")
public void beforeAdvice() {
System.out.println("前置通知记录日志...");
} // @AfterReturning("aspect_method()")
public void afterReturnAdvice() {
System.out.println("后置通知记录日志...");
} // @AfterThrowing("aspect_method()")
public void afterThrowsAdvice() {
System.out.println("异常通知记录日志...");
} // @After("aspect_method()")
public void afterAdvice() {
System.out.println("最终通知记录日志...");
} @Around("aspect_method()")
public Object aroundLog(ProceedingJoinPoint pjp) {
Object rtValue = null;
try {
Object[] args = pjp.getArgs();
System.out.println("前置通知记录日志...");
rtValue = pjp.proceed(args);
System.out.println("后置通知记录日志...");
return rtValue;
} catch (Throwable throwable) {
System.out.println("异常通知记录日志...");
throwable.printStackTrace();
} finally {
System.out.println("最终通知记录日志...");
}
return rtValue;
}
}
SpringAOP配置要点的更多相关文章
- 自学Aruba3.2-Aruba配置架构-Virtual AP配置要点
点击返回:自学Aruba之路 自学Aruba3.2-Aruba配置架构-Virtual AP配置要点 1. AP.AP-Group和Virtual-AP的关系 解析列举: AP1.AP3, ...
- Hadoop配置要点必看
hadoop 配置要点 软件 版本 java 1.8.0_151 hadoop 2.6.1 part1 $HADOOP_HOME/etc/hadoop 目录下配置参数. slaves 配置从节点 ya ...
- H3C子接口配置要点及实例说明
类型一:以太网子接口配置要点(单臂路由) 第一步:在路由器对端的交换机上配置好vlan信息(如vlan10/vlan20) 第二步:将交换机上与路由器直接相连的以太口配置成trunk口并同意 ...
- ENSP静态链路聚合实验配置要点及实例
链路聚合分为:静态链路聚合.动态链路聚合链路聚合的负载分担模式:对于二层数据流,系统会根据MAC地址(源mac地址和目的mac地址来计算),而对于三层数据流则会根据ip地址来进行负载分担计算. 静态链 ...
- validators配置要点及No result defined for action报错解决方案
在做JavaEE SSH项目时,接触到validators验证. 需要了解validators配置,或者遇到No result defined for action 这个错误时,可查阅本文得到有效解决 ...
- mybatisplus ssm配置要点
本以为不难,但也捣鼓了大半天,记录要点如下: 在pom中引入mybatis plus相关包 <!-- mybatis-plus框架包 start --> <dependency> ...
- SQL 2016 AlwaysOn 无域AlwaysOn配置要点
环境准备: (1)操作系统:Windows Server 2016 Datacenter (2)SQL Server 2016 配置SQL 2016 AlwaysOn 要点 1,因为没有域所以需要在 ...
- Linux下Nginx+Tomcat负载均衡和动静分离配置要点
本文使用的Linux发行版:CentOS6.7 下载地址:https://wiki.centos.org/Download 一.安装Nginx 下载源:wget http://nginx.org/pa ...
- spring---aop 配置
第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Befor ...
- springAOP配置原理
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
随机推荐
- 库函数 | C++17 std::filesystem文件系统 用法指北
本文将针对常用的场景,对 std::filesystem 的使用逐一进行验证: 判断文件夹是否存在 创建单层目录 逐级创建多层目录 创建多级目录 当前文件路径 创建文件"from.dat&q ...
- 【Qt Libraries】QUrl 的基本使用方法
参考博客: https://www.cnblogs.com/liushui-sky/p/10892097.html https://www.cnblogs.com/ShineLeBlog/p/1495 ...
- HashMap非线程安全到底有什么问题
HashMap是Java中常用的数据结构,用于存储键值对,并且提供了快速的查找和插入操作.下面挖掘一下HashMap内部的架构设计思维: 哈希函数的设计: HashMap使用哈希函数将键映射到数组索引 ...
- 你真的懂Linux内核中的阻塞和异步通知机制吗?
@ 目录 阻塞/非阻塞简介 阻塞/非阻塞例程 等待队列简介 等待队列相关函数 定义等待队列 初始化等待队列头 定义并初始化一个等待队列项 将队列项添加到等待队列头 将队列项从等待队列头移除 等待唤醒 ...
- vue判断用户在页面停留时间是否超时
需求 当用户停留超过15分钟后,用户提交订单,提示用户超时并重新加载页面 代码 data () { return { // 超时定时器 overTimer: null, // 是否超时 isOvert ...
- C#利用控件实现柱形图分析
数据 { using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=;database=db_TomeOne&quo ...
- python代码打包exe程序
1.安装pyinstaller 命令行输入:pip install pyinstaller 2.打包exe程序 输入命令:pyinstaller -F -w *.py(星号是.py的全部路径) pyi ...
- 机器学习-线性分类-支持向量机SVM-软间隔-核函数-13
目录 1. 总结 SVM 2. 软间隔svm 4. 核函数 1. 总结 SVM SVM算法的基础是感知器模型, 感知器模型 与 逻辑回归的不同之处? 逻辑回归 sigmoid(θx) 映射到 0-1之 ...
- kibana上执行ES DSL语言查询数据并查看表结构与数据、删除索引、查看文件大小
转载请注明出处: 1.kibana 上执行DSL 语言: 在kibana 中找到 Dev Tools,并双击打开,就可以进入执行DSL得执行页面了 执行DSL,示例如图: 2.在kibana上查看ES ...
- 关于编写C时的调试--VS,VSCODE,DEV-C++
1.问题 VS最大的问题是不支持scanf函数,后面的调试部分我就没试了,主要用VS来写C++ VSCODE是服了他的C/C++插件,我死活卡在debug中scanf的输入部分,集成终端根本无法输入, ...