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引入 ...
随机推荐
- 2019年第十届蓝桥杯国赛C++B组
部分题目示意图来自网络,所以会带水印 最后编辑时间: 2021年5月12日 统一声明 如果不写默认带有常用头文件 如果不表明主函数默认表示在 void solve(){} 默认使用 using nam ...
- AtCoder | ABC 125 Person Editorial
开始补AtCoder的数学题了,练下思维 AB两道都很简单,看懂题就OK. C,D稍微麻烦一些 Problem C: GCD On Blackboard 为了解决此问题,我们需要了解最大公约数(GCD ...
- OKR之剑·实战篇05:OKR致胜法宝-氛围&业绩双轮驱动(上)
作者:vivo 互联网平台产品研发团队 本文是<OKR 之剑>系列之实战第 5 篇-- 我们的OKR执行如此顺利,离不开我们的"双轮驱动".类似于亚马逊的"飞 ...
- ttf转eot
Webfont Generator https://www.fontsquirrel.com/tools/webfont-generator 使用@font-face显示web自定义字体,字体获取工具 ...
- 传说中 PUE 预测精度高达 0.005 的工作
杨震, 赵静洲, 林依挺 等. 数据中心 PUE 能效优化的机器学习方法. 系统工程理论与实践, 2022, 42(3): 811-832 省流: 这是 2020 年的论文,用神经网络进行了认真的 P ...
- idea安装并使用maven依赖分析插件:Maven Helper
本文为博主原创,转载请注明出处: 在maven工程中,经常会查看maven的依赖树,在没使用该插件时,需要maven dependency:tree命令进行查看依赖树, 通过maven helper ...
- WPF|黑暗模式的钱包支付仪表盘界面设计
阅读目录 效果展示 准备 简单说明 + 源码 结尾(视频及源码仓库) 1. 效果展示 欣赏效果: 2. 准备 创建一个WPF工程,比如站长使用 .NET 7 创建名为 WalletPayment 的W ...
- Java开发者的Python进修指南:JSON利器之官方json库、demjson和orjson的实用指南
JSON JSON作为目前最流行的传输格式,在Python中也有相应的实现方式.由于JSON格式的文本可以跨平台并且简单易用,因此被广泛传播.因此,我们今天的主要讨论内容是如何熟练地应用Python的 ...
- CSS - 使图片自适应
img { height: 100%; object-fit: cover; }
- css - 伪元素清除浮动
.clearfix:after{ content:""; /*设置内容为空*/ height:0; /*高度为0*/ line-height:0; /*行高为0*/ display ...