Spring——基于注解的AOP配置

基于注解的AOP配置

1.创建工程

在这里插入图片描述

1.1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.wantong</groupId><artifactId>Spring_AOP_Annotation</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- Spring常用依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.8.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.1.8.RELEASE</version></dependency></dependencies>
</project>

1.2.dao

@Repository
public class UserDaoImpl implements UserDao {@Overridepublic void addUser(){System.out.println("insert into tb_user......");}
}

1.3.service

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;public void addUser() {userDao.addUser();}
}

1.4.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.wantong"></context:component-scan>
</beans>

1.5.测试

/*** 模拟表现层*/
public class Client {public static void main(String[] args) {ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//使用对象UserService userService = ac.getBean("userServiceImpl",UserService.class);userService.addUser();}
}

2.增强

2.1.applicationContext.xml

<!-- 开启spring对注解AOP的支持 -->
<aop:aspectj-autoproxy/>

2.2.AOP配置

  1. 常用注解

    • @Aspect:把当前类声明为切面类
    • @Before:前置通知,可以指定切入点表达式
    • @AfterReturning:后置【try】通知,可以指定切入点表达式
    • @AfterThrowing:异常【catch】通知,可以指定切入点表达式
    • @After:最终【finally】通知,可以指定切入点表达式
    • @Around:环绕通知,可以指定切入点表达式
  2. 注解方式实现aop

@Component
@Aspect
public class MyLogAdvice {//前置通知@Before("execution(* com.wantong.service.*.*(..))")public void before(){System.out.println("前置通知");}//后置通知【try】@AfterReturning("execution(* com.wantong.service.*.*(..))")public void afterReturning(){System.out.println("后置通知");}//异常通知【catch】@AfterThrowing("execution(* com.wantong.service.*.*(..))")public void afterThrowing(){System.out.println("异常通知");}//最终通知【finally】@After("execution(* com.wantong.service.*.*(..))")public void after(){System.out.println("最终通知");}//环绕通知@Around("execution(* com.wantong.service.*.*(..))")public void around(ProceedingJoinPoint joinPoint){try {System.out.println("方法执行前的环绕通知");joinPoint.proceed();System.out.println("方法执行后的环绕通知");} catch (Throwable throwable) {throwable.printStackTrace();}}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/333936.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么制作文件二维码?文件做成二维码的优势

现在经常会遇到查看或者下载文件的情况&#xff0c;通过这种方式来完成文件的传递&#xff0c;那么为什么将文件做成二维码的方式来展示呢&#xff1f;二维码的优势有很多&#xff0c;比如能够让更多人同时获取内容才&#xff0c;方便更快的传播&#xff0c;而且没有有效期的限…

Ant Design 日期选择器 a-date-picker 的使用

代码如下&#xff1a; data() {return {initializationTime: } },<a-form-item label"上映时间" :labelCol"labelCol" :wrapperCol"wrapperCol"><a-date-pickerv-model"initializationTime"format"YYYY-MM-DD HH:mm:ss&…

chromium浏览器静默截图

操作系统&#xff1a;统信操作系统 安装浏览器 截图命令 /opt/apps/cn.google.chrome/files/google/chrome/google-chrome --no-sandbox --headless --disable-gpu --screenshottest.png -run-all-compositor-stages-before-draw --window-size1280,1400 http://www.baidu.co…

LeetCode(209)长度最小的子数组⭐⭐

给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;s 7, nums [2,3,1,2,4,3]输出&#xff1a;2…

解决kubelet报failed to get imageFs info: non-existent label \“docker-images\“

问题&#xff1a; 一环境主机重启后&#xff0c;查看kubelet日志经常有大量无法回收镜像文件报错&#xff0c;会导致kubelet的pleg不健康&#xff0c;从而导致kubelet发生重启。报错如下&#xff1a; 解决办法 解决方法一&#xff1a; systemctl stop docker systemctl stop …

【VTKExamples::Visualization】第三期 Background设置

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 前言 本文分享几种背景设置的方式&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xff01; 你的点赞就是我的动力(…

池化层解析:简单易懂理解 PyTorch 中的核心组件

目录 torch.nn详解 nn.MaxPool1d nn.MaxPool2d nn.MaxPool3d nn.MaxUnpool1d nn.MaxUnpool2d nn.MaxUnpool3d nn.AvgPool1d nn.AvgPool2d nn.AvgPool3d nn.FractionalMaxPool2d nn.FractionalMaxPool3d nn.LPPool1d nn.LPPool2d nn.AdaptiveMaxPool1d nn.Adapt…

Lumerical Monitors------Mode expansion monitors

Lumerical Monitors------Mode expansion monitors 引言正文引言 本文,作者将重点介绍 Lumerical 中的 Mode expansion monitors 的用法 正文 Mode expansion monitors 允许我们去分析传递进入光纤或者波导中的任何感兴趣模式的功率百分比。能做到这一点是因为 Mode expans…

光缆通信有什么特点?

光缆由一个或多个光纤组成&#xff0c;每个光纤由一个非常纤细的玻璃或塑料纤维组成&#xff0c;可以传输光信号的高速数据。光缆通信具有以下特点&#xff1a; 1. 高带宽&#xff1a;光缆通信可以提供非常高的带宽&#xff0c;远远超过传统的铜缆通信。光纤的宽带特性使其能够…

kubernetes NetworkPolicy(防火墙)

开头语 写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 概述 网络策略指的是 Pod 间的网络隔离策略&#xff0c;默认情况下是互通…

Google Breakpad使用方法

源码下载地址&#xff1a;https://chromium.googlesource.com/breakpad/breakpad 依赖头文件下载地址&#xff1a; https://chromium.googlesource.com/linux-syscall-support Breakpad由三个主要组件&#xff1a; client 是一个库, 以library的形式内置在应用中&#xff0c…

Flask修改Response Headers中的Server值

Headers中的Server会暴露出Python版本&#xff0c;导致的结果就是方便被渗透快速定位Python版本后找到对应版本的漏洞&#xff0c;因此导致网络安全问题 伪方法&#xff1a; 像这个马上就暴露出Python版本&#xff0c;如何解决这个网络上有说直接用response.headers.remove(Ser…