一、基于配置文件

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配置要点的更多相关文章

  1. 自学Aruba3.2-Aruba配置架构-Virtual AP配置要点

    点击返回:自学Aruba之路 自学Aruba3.2-Aruba配置架构-Virtual AP配置要点  1. AP.AP-Group和Virtual-AP的关系 解析列举:      AP1.AP3, ...

  2. Hadoop配置要点必看

    hadoop 配置要点 软件 版本 java 1.8.0_151 hadoop 2.6.1 part1 $HADOOP_HOME/etc/hadoop 目录下配置参数. slaves 配置从节点 ya ...

  3. H3C子接口配置要点及实例说明

     类型一:以太网子接口配置要点(单臂路由)  第一步:在路由器对端的交换机上配置好vlan信息(如vlan10/vlan20)  第二步:将交换机上与路由器直接相连的以太口配置成trunk口并同意 ...

  4. ENSP静态链路聚合实验配置要点及实例

    链路聚合分为:静态链路聚合.动态链路聚合链路聚合的负载分担模式:对于二层数据流,系统会根据MAC地址(源mac地址和目的mac地址来计算),而对于三层数据流则会根据ip地址来进行负载分担计算. 静态链 ...

  5. validators配置要点及No result defined for action报错解决方案

    在做JavaEE SSH项目时,接触到validators验证. 需要了解validators配置,或者遇到No result defined for action 这个错误时,可查阅本文得到有效解决 ...

  6. mybatisplus ssm配置要点

    本以为不难,但也捣鼓了大半天,记录要点如下: 在pom中引入mybatis plus相关包 <!-- mybatis-plus框架包 start --> <dependency> ...

  7. SQL 2016 AlwaysOn 无域AlwaysOn配置要点

    环境准备: (1)操作系统:Windows Server 2016 Datacenter (2)SQL Server 2016 配置SQL  2016 AlwaysOn 要点 1,因为没有域所以需要在 ...

  8. Linux下Nginx+Tomcat负载均衡和动静分离配置要点

    本文使用的Linux发行版:CentOS6.7 下载地址:https://wiki.centos.org/Download 一.安装Nginx 下载源:wget http://nginx.org/pa ...

  9. spring---aop 配置

    第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Befor ...

  10. springAOP配置原理

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...

随机推荐

  1. 2019年第十届蓝桥杯国赛C++B组

    部分题目示意图来自网络,所以会带水印 最后编辑时间: 2021年5月12日 统一声明 如果不写默认带有常用头文件 如果不表明主函数默认表示在 void solve(){} 默认使用 using nam ...

  2. AtCoder | ABC 125 Person Editorial

    开始补AtCoder的数学题了,练下思维 AB两道都很简单,看懂题就OK. C,D稍微麻烦一些 Problem C: GCD On Blackboard 为了解决此问题,我们需要了解最大公约数(GCD ...

  3. OKR之剑·实战篇05:OKR致胜法宝-氛围&业绩双轮驱动(上)

    作者:vivo 互联网平台产品研发团队 本文是<OKR 之剑>系列之实战第 5 篇-- 我们的OKR执行如此顺利,离不开我们的"双轮驱动".类似于亚马逊的"飞 ...

  4. ttf转eot

    Webfont Generator https://www.fontsquirrel.com/tools/webfont-generator 使用@font-face显示web自定义字体,字体获取工具 ...

  5. 传说中 PUE 预测精度高达 0.005 的工作

    杨震, 赵静洲, 林依挺 等. 数据中心 PUE 能效优化的机器学习方法. 系统工程理论与实践, 2022, 42(3): 811-832 省流: 这是 2020 年的论文,用神经网络进行了认真的 P ...

  6. idea安装并使用maven依赖分析插件:Maven Helper

    本文为博主原创,转载请注明出处: 在maven工程中,经常会查看maven的依赖树,在没使用该插件时,需要maven dependency:tree命令进行查看依赖树, 通过maven helper ...

  7. WPF|黑暗模式的钱包支付仪表盘界面设计

    阅读目录 效果展示 准备 简单说明 + 源码 结尾(视频及源码仓库) 1. 效果展示 欣赏效果: 2. 准备 创建一个WPF工程,比如站长使用 .NET 7 创建名为 WalletPayment 的W ...

  8. Java开发者的Python进修指南:JSON利器之官方json库、demjson和orjson的实用指南

    JSON JSON作为目前最流行的传输格式,在Python中也有相应的实现方式.由于JSON格式的文本可以跨平台并且简单易用,因此被广泛传播.因此,我们今天的主要讨论内容是如何熟练地应用Python的 ...

  9. CSS - 使图片自适应

    img {         height: 100%;         object-fit: cover; }

  10. css - 伪元素清除浮动

    .clearfix:after{ content:""; /*设置内容为空*/ height:0; /*高度为0*/ line-height:0; /*行高为0*/ display ...