一、基于配置文件

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. vivo 悟空活动中台 - H5 活动加载优化

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/6gtVR0nVNcZvREjwftZgzA作者:悟空中台研发团队 [悟空活动中台]系列往期精 ...

  2. hbulider 运行微信开发者工具 Enable IDE Service (y/N) 

    问题:hbulider 运行微信开发者工具 出现如下页面,没有输入y的交互界面  解决办法:先安装微信开发者工具,然后打开微信开发者工具 再次运行:

  3. d3生成器--line,area,diagonal

    https://blog.csdn.net/qq_31396185/article/details/78147612

  4. SpringBoot 集成短信和邮件

    准备工作 1.集成邮件 以QQ邮箱为例 在发送邮件之前,要开启POP3和SMTP协议,需要获得邮件服务器的授权码,获取授权码: 1.设置>账户 在账户的下面有一个开启SMTP协议的开关并进行密码 ...

  5. 图文ASP.Net MVC Razor页面中HtmlHelper帮助程序的写法

    将以下内容复制到cshtml文件中 @using Microsoft.AspNetCore.Html @{ ViewData["Title"] = ""; } ...

  6. wireshark 显示过滤表达式

    转载请注明出处: 1.根据协议过滤: 在显示过滤表达式的输入框中直接输入对应的协议类型即可:http   tcp  udp 2.根据 IP 过滤: 根据源IP地址过滤:如源地址IP为:127.0.0. ...

  7. 06-逻辑仿真工具VCS-Debug

    逻辑仿真工具VCS verdi只进行debug进行使用,不进行编译,只进行产生波形之后的debug 仿真速度和代码质量有关系,选项也会影响仿真速度,行为级>RTL>门级 信号的可见性和可追 ...

  8. 【MCU】浮点数如何判等

    [来源]https://mp.weixin.qq.com/s/481H4imm73IIS1yFI7-DNA

  9. 精通 VS 调试技巧,学习与工作效率翻倍!

    ​ 欢迎大家来到贝蒂大讲堂 ​ 养成好习惯,先赞后看哦~ ​ 所属专栏:C语言学习 ​ 贝蒂的主页:Betty's blog ​ 1. 什么是调试 当我们写代码时候常常会遇见输出结果不符合我们预期的情 ...

  10. [转帖]容器化 TCP Socket 缓存、接收窗口参数

    https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/#rmem_default 最近需要支持一个单 POD 的 TCP 连接数上 1 ...