Spring-Day8

AOP通知
  1. 前置通知@Befor:目标方法之前执行

    @Aspect // 标记为了切面类
    @Component // 必须声明为 Spring 的 bean
    public class LogAspect {// 实现方法用时 切点表达式// 前置通知@Before("execution(* com.example.c4_aop.UserService.*(..) )")public void before(JoinPoint joinPoint) {// 记录当前方法的方法名,参数String methodName = joinPoint.getSignature().getName();// 参数Object[] args = joinPoint.getArgs();System.out.println("当前执行的方式是"+methodName+":参数"+Arrats.toString(args));}
    }
  2. 后置通知@After:目标方法之后执行

  3. 异常通知@AfterThrowing:目标方法出现了异常执行

  4. 返回通知@AfterReturning:目标方法返回值执行

  5. 环绕通知@Around:可以把代码增强在目标方法的任意地方,更通用

切点表达式

切点表达式的抽取

@Pointcut("execution(* com.example.c4_aop.UserService.*(..) )")
public void poincut(){}

这样,只需要在通知中写入此方法即可,如:

@Around("pointcut()")

execution格式:用于匹配方法执行连接点。这是使用Spring AOP时使用的主要切点标识符。可以匹配到方法级别

execution(modifiers-pattern? //访问修饰符,问号代表可写可不写ret-type-pattern   //方法返回值declaring-type-pattern?name-pattern(param-pattern) //类名.方法名(方法参数)throws-pattern?)   //抛出异常类型

@annotation:限制匹配连接点(在Spring AOP中执行的方法具有给定的注解)

需求:需要记录每个方法详细作用,并且记录数据库日志表

Log方法

@Retention(RetentionPolicy.RUNTIME)  // 注解的保留
@Target({ElementType.METHOD,ElementType.TYPE})  // 可以标记的地方
public @interface Log {
}
// Poincut 所有的方法有log注解都会匹配
// 如果要在通知的参数中绑定注解就不能单独抽取
// 如果要在通知的参数中绑定注解,声明就是参数名了,不是注解类型!
@Pointcut("@annotation(Log)")
public void pointcutAnnotation(){}

18.Spring事务

什么是事务:一组关联的数据库操作;要么都成功,要么都失败,保证业务操作完整性的一种数据库机制

ACID四大特性:原子性,一致性,隔离性,持久性

spring要操作数据库的话:要导入spring-jdbc

spring-dao.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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"//DataSource:使用Spring的数据源替换Mybatis的配置,这里使用Spring提供的JDBC<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"<property name="username" value="root"/><property name="password" value="123456"/></bean>//sqlSessionFactory<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"?<property name="configLocation" value="classpath:mybatis-config.xml"/><property name="mapperLocations" vlaue="classpath:com/kuang/mapper/*xml"/></bean>//SqlSessionTemplate:就是我们使用的sqlSession<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory"/></bean>
</beans>

Spring声明式事务

//配置声明式事务
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><constructor-arg ref="dataSource"/>
</bean>
//结合AOP实现事务的织入
//配置事务通知
<tx:advice id="txAdvice" transaction-manager="transactionManager">//给那些方法配置事务//配置事务的传播特性<tx:attributes><tx:method name="add" propagation="REQUIRED"/><tx:method name="update" propagation="REQUIRED"/><tx:method name="query" read-only="true"/></tx:attributes>
</tx:advice>
//配置事务切入
<aop:config><aop:pointcut id="txPointCut" experssion="execution(*com.zkw.mapper.*.*(..))"<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>

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

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

相关文章

YOLOv11融合[ECCV2024]自调制特征聚合SMFA模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《SMFANet: A Lightweight Self-Modulation Feature Aggregation Network for Efficient Image Super-Resolution》 一、 模块介绍 论文链接&#xff1…

【C++】C++移动语义、左值右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符

二十五、C移动语义、左值和右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符 本部分讨论一些更高级的C特性&#xff1a;C移动语义。但是讲移动语义之前我们得先了解什么左值右值、左值引用和右值引用。 1、C的左值和右值、左值引用和右值引用左值是有地址的…

三菱QD77MS定位模块速度更改功能

速度更改功能” 是以任意时机将控制中的速度更改为新指定的速度的功能。更改后的速度直接设置到缓冲存储器中&#xff0c;并根据速度更改指令([cd.15速度更改请求)或者外部指令信号执行速度更改。 但是&#xff0c;机械原点复位的情况下&#xff0c;检测出近点狗 ON 并开始向蠕…

【Django】视图函数

【Django】视图函数 视图函数的本质是Python中的函数&#xff0c;视图函数负责处理用户的请求并返回响应&#xff0c;该响应可以是网页的HTML内容、重定向、404错误、XML文档、图像或者任何东西&#xff0c;一般在应用中的views.py编写&#xff0c;示例代码如下&#xff1a; …

Git 入门篇(二)

前言 Git 入门篇&#xff08;一&#xff09; Git 入门篇&#xff08;二&#xff09; Git 入门篇&#xff08;三&#xff09; 目录 创建远程代码仓库 创建本地代码仓库 同步本地-远程代码仓库 代码托管 创建远程代码仓库 登录&#xff1a;gitee.com ​ 新建仓库 ​ 创建本…

PLC_博图系列☞基本指令”TOF:启动关断延时定时器“

PLC_博图系列☞基本指令”TOF&#xff1a;启动关断延时定时器“ 文章目录 PLC_博图系列☞基本指令”TOF&#xff1a;启动关断延时定时器“背景介绍TOF&#xff1a; 启动关断延时定时器说明参数脉冲时序图示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 TOF 背…

【RabbitMQ】之高可用集群搭建

一、RabbitMQ 集群简介 1、默认集群原理1-1、RabbitMQ 集群简介 单台 RabbitMQ 服务器处理消息的能力是有瓶颈的&#xff0c;而且可靠性还无法保证&#xff0c;所以需要通过集群来提高消息的吞吐量和提高数据可靠性。 由于 RabbitMQ 本身是基于 Erlang 编写&#xff0c;而 Er…

改进系列(3):基于ResNet网络与CBAM模块融合实现的生活垃圾分类

目录 1. ResNet介绍 2. CBAM 模块 3. resnet cbam 3.1 添加在每个layer层后 3.2 关于训练的建议 4. 垃圾分类实战 4.1 数据集 4.2 训练 4.3 最好的权重 4.4 推理 5. 其它 1. ResNet介绍 ResNet&#xff08;残差网络&#xff09;是一种深度卷积神经网络模型&#xf…

Linux 服务器上部署 .NET Core 应用程序,值得收藏!

在 Linux 服务器上部署 .NET Core 应用程序&#xff0c;标志着传统的以微软为中心的部署平台的重大转变。.NET Core 的跨平台特性允许开发人员享受 Linux 环境的性能、可靠性和安全性。本指南提供了在各种 Linux 发行版上部署 .NET Core 应用程序的全面概述&#xff0c;重点是使…

2024-11-01 - 统一身份认证 - OpenLdap - 中间件 - 流雨声

摘要 2024-11-01 周五 杭州 暴雨 调查问卷: https://www.wjx.cn/vm/exIBFDM.aspx# 2024年转瞬即逝&#xff0c;可是生活还在继续&#xff0c;这里有一项关于人工智能和项目管理对于效能关系的调研问卷&#xff0c;AI 对工作的作用和影响。问卷不采集个人信息&#xff0c;在此…

前端页面性能优化的常见问题与解决方案

在当今互联网高速发展的时代&#xff0c;前端页面的性能对于用户体验至关重要。一个加载缓慢、交互卡顿的页面很可能会导致用户流失。本文将深入探讨前端页面性能优化中常见的问题以及相应的解决方案。 一、常见问题 &#xff08;一&#xff09;资源加载问题 文件体积过大 …

视频播放相关的杂记

基于QT FFMPEG设计一款 RTMP协议推流、视频录制软件 实现的功能&#xff1a; &#xff08;1&#xff09;将摄像头视频流 麦克风音频流合并&#xff0c;并推到流媒体服务器 &#xff08;2&#xff09;将摄像头视频流 麦克风音频流保存到本地磁盘 基于QtFFMPEG设计一款RTM…

Pycharm,2024最新版Pycharm下载安装配置教程!

目录 1、Pycharm 简介2、Pycharm下载3、环境变量的配置4、Pycharm的使用 1、Pycharm 简介 Pycharm资料领取不收米 PyCharm是一种Python IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Py…

Redis9:商户查询缓存3

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

解锁函数的魔力:Python 中的多值传递、灵活参数与无名之美

文章目录 前言&#x1f4d6;一、多值返回&#x1f4da;1.1 多值返回的概念&#x1f4da;1.2 工作原理&#x1f4da;1.3 应用场景&#x1f4dc;总结 &#x1f4d6;二、 多种参数传递形式&#x1f4da;2.1 位置参数&#xff08;Positional Arguments&#xff09;&#x1f4da;2.2…

若依框架-添加测试类-最新

1、在【ruoyi-admin】的pom.xml下添加依赖 <!-- 单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId><scope>test</scope></dependency><dependency>…

初识网络编程TCP/IP

目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程&#xff0c;会出现一堆协议、概念、这层次那技术的&#xff0c;头都大了&#xff0c;还是得总结总结…… 相关名词解释 ✨✨网络…

【C++课程学习】:继承(上)(详细讲解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一.继承的概念和定义 &#x1f384;继承的概念&#xff1a; &#x1f384;继承的定义&#xff1a; …

Linux笔记之pandoc实现各种文档格式间的相互转换

Linux笔记之pandoc实现各种文档格式间的相互转换 code review! 文章目录 Linux笔记之pandoc实现各种文档格式间的相互转换1.安装 Pandoc2.Word转Markdown3.markdown转html4.Pandoc 支持的一些常见格式4.1.输入格式4.2.输出格式 1.安装 Pandoc sudo apt-get install pandoc # …

封装的数字滚动组件的实现代码

效果&#xff1a; 学习啦&#xff1a; Vue 是一个渐进式框架&#xff0c;鼓励通过组件化来构建应用&#xff0c;其组件化优势&#xff1a; 代码复用&#xff1a;不同的视图和功能被封装成独立的组件&#xff0c;便于复用。易于维护&#xff1a;每个组件职责单一、耦合度低&…