Spring——基于注解的AOP配置

news2024/10/5 14:11:17

基于注解的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 {

    @Override
    public void addUser(){
        System.out.println("insert into tb_user......");
    }
}

1.3.service

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private 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/beans
        		http://www.springframework.org/schema/beans/spring-beans.xsd
        		http://www.springframework.org/schema/aop
        		http://www.springframework.org/schema/aop/spring-aop.xsd
        		http://www.springframework.org/schema/context
        		http://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.coloradmin.cn/o/1368957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于DNA的密码学和隐写术综述

摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域,利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,该领域引起…

怎么把图片表格转成word表格?教你简单转换

怎么把图片表格转成word表格&#xff1f;在我们的日常工作中&#xff0c;经常会遇到需要将图片表格转换成Word表格的情况。这样不仅可以方便我们编辑、整理数据&#xff0c;还能提高工作效率。那么&#xff0c;如何将图片表格快速、准确地转换成Word表格呢&#xff1f;下面就为…

openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败

文章目录 openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败190.1 服务启动失败190.1.1 问题现象190.1.2 原因分析190.1.3 处理办法 openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败 190.1 服务启动失败 190.1.1 问题现…

国芯科技荣膺高工智能汽车“年度车规MCU高成长供应商”,加速产品精准化系列化布局

2023年12月13—15日&#xff0c;2023&#xff08;第七届&#xff09;高工智能汽车年会在上海召开&#xff0c;大会以“寻找拐点”为主题&#xff0c;通过超80场主题演讲及多场圆桌对话&#xff0c;为智能汽车赛道参与者「备战2024」提供全方位的决策支持。 作为汽车电子芯片领…

DNS解析原理和k8s DNS 实践

1. 问题背景 1.1 域名解析异常 近期开发的一个功能&#xff0c;需要在k8s集群容器环境中调用公司内部api&#xff0c;api提供了内网域名&#xff0c;解析内网域名异常导致请求超时&#xff0c;因此梳理了下DNS的知识点。 可以先看到下面&#x1f447;这段配置&#xff0c;修…

基于net6的asp.net core webapi项目打包为docker镜像,并推送至私有镜像仓库harbor中

基于net6的asp.net core webapi项目打包为docker镜像&#xff0c;并推送至私有镜像仓库harbor中 0、环境说明1、打包步骤1.1 创建Asp.net core WebApi项目1.2 在Asp.net core WebApi项目根目录下创建Dockerfile文件1.3 在子系统Ubuntu20.04.4中通过docker build生成docker镜像1…

资源分享:GIS插件-海怪工具箱(附下载链接)

工具详情&#xff1a; ArcGIS海怪工具箱&#xff0c;可直接在ArcGIS中安装使用。 功能&#xff1a; 1、按属性编码&#xff1a;根据字段编码&#xff0c;相同的字段值同一个编码&#xff0c;然后依次升序。 可以手动指定编码样式&#xff0c;比如输入1&#xff0c;那么后续编…

three.js实现旋转棱锥效果

three.js实现旋转棱锥效果 图例 步骤 创建一个四面棱锥添加贴图render函数中旋转&#xff0c;修改高度 代码 <template><div class"app"><div ref"canvesRef" class"canvas-wrap"></div></div> </template…

Python——欢迎来到吱昂张游乐园

欢迎来到吱昂张游乐园&#xff01;&#xff01;&#xff01; 凡是身高小于120或者您的vip等级大于三级的皆可免费游玩。 那我们接下来就来设计一下以上的规则叭 print("欢迎来到吱昂张游乐园") if int(input("输入您的身高&#xff1a;"))>120:print…

Python print 高阶玩法

Python print 高阶玩法 当涉及到在Python中使用print函数时&#xff0c;有许多方式可以玩转文本样式、字体和颜色。在此将深入探讨这些主题&#xff0c;并介绍一些print函数的高级用法。 1. 基本的文本样式与颜色设置 使用ANSI转义码 ANSI转义码是一种用于在终端&#xff0…

62.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏公告类的C++还原

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;游戏红字公告功能的逆向分析-CSDN博客 码云地址&#xff08;master分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;0888e34878d9e7dd0acd08ef…

HarmonOS 日期选择组件(DatePicker)

本文 我们一起来看基础组件中的 DatePicker 这就是 日程开发中的日期组件 他可以创建一个日期的范围 并创建一个日期的滑动选择器 这里 我们先写一个组件的骨架 Entry Component struct Index {build() {Row() {Column() {}.width(100%)}.height(100%)} }然后 我们先在Column组…

聚道云软件连接器助力某贸易公司实现付款流程自动化

客户介绍&#xff1a; 某贸易公司是一家集进出口贸易、国内贸易、电子商务等业务于一体的综合性贸易企业。公司业务遍及全球多个国家和地区&#xff0c;拥有庞大的供应商网络和采购需求。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 客户痛点&#…

OpenVoice实时语音克隆功能实现

前言 在【OpenVoice本地部署教程与踩坑记录】一文中介绍了OpenVoice的基本概念与&#xff0c;并且完成了项目的安装与运行。官方给的示例和用法中仅包含了文本转TTS再克隆音色的功能&#xff0c;仅能用于TTS场景下的文字朗读。 本文基于官方示例改造&#xff0c;实现了实时采集…

公司新买的BI,和金蝶系统配合太默契了

公司一直都用金蝶系统来实现包括财务管理、供应链管理、人力资源管理等多个方面的资源的合理配置和业务流程的自动化。但到了数据分析这块&#xff0c;金蝶系统就明显力不从心&#xff0c;需要一个专业的数据分析工具来接手。财务经理推荐用奥威BI&#xff0c;说这款BI的一大特…

Windows内存管理(一):Windows性能监视器(PerfMon)

一、什么是性能监视器 什么是性能监视器&#xff1f; (What is Performance Monitor? )很多时候&#xff0c;我们的计算机只是停止响应、意外关闭或行为异常。这种行为可能有多种原因&#xff0c;指出确切原因可能会有很大帮助。Windows有一个名为Performance Monitor的工具&…

Python——数据类型转换

# 将数字类型转换成字符串 num_str str(111) print(type(num_str), num_str) \# 将浮点类型转换成字符串 float_str str(12.34) print(type(float_str), float_str) # 将字符串转变成数字 num int("234") print(type(num)) # 将字符串转变成浮点型 num2 float(&q…

(已解决)踩坑spring-session-data-redis包出现sessionId不一致问题

问题&#xff1a;今天在使用spring-session-data-redis的jar包时&#xff0c;出现了本地使用时sessionId是一致的&#xff0c;线上使用的时候sessionid是不一致的。 在网上查了半天资料&#xff0c;知道是其中这个包 DefaultCookieSerializer 出现了问题&#xff0c;但是里面的…

基于Listener实现在线人数监测的简单案例

一、需求 只要有用户登录到服务器&#xff0c;就记录在线用户1。 二、使用到的Listner介绍 1、HttpSessionListener 监听器 当一个HttpSession刚被创建或者失效&#xff08;invalidate&#xff09;的时候&#xff0c;将会通知HttpSessionListener监听器。 方法声明功能介绍v…

Vscode设置git账户密码(不需要每次都输入)

在Vscode提交项目代码或者拉取代码的时候&#xff0c;如果每次都需要输入git的账户密码&#xff0c;那么就在终端输入&#xff1a; git config --global credential.helper store 命令 然后执行git pull 提示输入用户密码后&#xff0c;就会缓存&#xff1b; ※注&#xff1a;如…