JAVA学习笔记DAY8——Spring_AOC Spring-tx

文章目录

  • AOC概述
  • Spring-aop 配置
    • 举例快速实现
    • 获取切点详细信息
      • 在增强方法中获取目标方法的信息
      • 返回结果
      • 异常信息
    • 切点表示式语法
    • 统一切点管理
    • 环绕通知 @Around
    • 切面增强优先级
    • CGlib生效场景
    • 注解方式aop总结
    • xml 方式配置aop
  • Spring AOP 对获取Bean的影响
  • Spring 声明性事务
    • 概念
    • 事务管理器和原理

AOC概述

AOC,即面向切面编程,是一种编程思想。

如果说面向对象编程(OOP)是一种纵向的编程思维,AOC则是横向的编程思维。用于Spring中可以弥补OOP存在的不足,例如难以对方法细节进行单独修改而不影响子父类,AOP将所有非核心代码进行统一管理,降低了代码的耦合性。

底层使用代理技术。

Spring-aop 配置

举例快速实现

需求:给计算的业务类添加日志

  1. 导入依赖
  2. 正常编写核心业务加入ioc容器
  3. 编写ioc的配置类和文件
  4. 测试环境
  5. 增强类,定义三个增强方法
  6. 增强类的配置(插入切点的位置,切点指定,切面配置)
  7. 开启aop的配置

获取切点详细信息

MyAdvice类

  1. 定义方法-增强代码
  2. 使用注解指定对应的位置
  3. 配置切点表达式选中方法
  4. 切点和ioc的配置
  5. 开启aspectj注解的支持

在增强方法中获取目标方法的信息

形参 JoinPoint
给需要用到的增强方法添加形参 (JoinPoint joinpoint)

//获取方法属于的类的信息
String simpleName = joinPoint.getTarget().getClass().getSimpleName();
//参数列表等类似

返回结果

@AfterReturning中
形参(Object result)接收返回结果

异常信息

@AfterThrowing中
(Throwable t)

切点表示式语法

固定语法execution(切点表达式)

  1. 访问修饰符

  2. 方法返回参数类型
    前两位可以整合成一个*

  3. 包的位置

    • 单层模糊 .*
    • 多层模糊
  4. 类的名称

  5. 方法名

  6. 形参列表

    • ()-没有参数
    • (…){两个点}-模糊参数:有没有参数都可以
execution(public int com.atguigu.spring.aop.target.Calculator.dir ( int,int ))

统一切点管理

  1. 当前类中提取
    定义一个空方法
    注解@Pointcut()
    增强注解中引用切点表达式的方法即可
  2. 创建一个存储切点的类(推荐)
    单独维护切点

环绕通知 @Around

环绕方法需要自己在通知中定义目标方法的执行。

  • 形参(ProceedingJoinPoint)
  • @return 目标方法的返回值
@Around("pc()")
public Object transaction(ProceedingJoinPoint joinPoint){//保证目标方法被执行Object[] args= joinPoint.getArgs();Object result = null;try{System.out.println("开启事务");//增强代码result = joinPoint.proceed(args);}catch(Throwable e){System.out.println("事务回滚");throw new RuntimeException(e);}finally{}return result;
}

切面增强优先级

@Order() 值越小,优先级越高(外圈),越前置先执行,越后置后执行。

CGlib生效场景

没有接口时会从jdk转为cglib。

注解方式aop总结

  1. 正常写核心方法
  2. advice类(增强类)
    用不同注解对应不同的方法
    同样需要@Component和@Aspect
  3. 提取到公共行为的切点 pointcut
  4. 开启aspectj注解支持
    • 如果在配置文件中:<aop:aspectj-autoproxy />
    • 如果用配置类:@EnableAspectJAutoProxy

xml 方式配置aop

spring.xml 一般放在resources中

<aop:config><!--声明切点标签@Pointcut--><!--切面配置标签@Aspect--><!--位置指定标签--></aop:config>

Spring AOP 对获取Bean的影响

  • 声明一个接口,接口有一个实现类,又有一个切面类应用于实现类。则实际上是代理类在Ioc中,故仅能通过接口获取bean。
  • 若无接口,用cglib,则可以用类获取bean。(代理有继承)

Spring 声明性事务

概念

  • 编程式事务
    编写代码的方式直接控制事务的提交和回滚。会有大量冗余。
  • 声明式事务
    使用注解或XML配置方式控制事务。
    需要第三方框架(Spring-tx)

事务管理器和原理

Spring-tx 是对 Spring-AOP 的再次封装。

事务管理器(接口)用于具体提供事务方法。

  • DataSourceTransactionManager
  • HibernateTM
  • JpaTM

需要:

  1. 选择一个合适的事务管理器实现加入到ioc容器
  2. 指定哪些方法需要添加事务即可

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

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

相关文章

多态深度剖析

前言 继承是多态的基础&#xff0c; 如果对于继承的知识还不够了解&#xff0c; 可以去阅读上一篇文章 继承深度剖析 基本概念与定义 概念&#xff1a; 通俗来说&#xff0c;就是多种形态。具体点就是去完成某个行为&#xff0c; 当不同的对象去完成时会产生出不同的状…

docker使用auth登录

配置config.json文件 vim ~/.docker/config.json 格式&#xff1a; {"auths":{"registry.digitalocean.com":{"auth":"xxx"}} }QA:配置不生效&#xff0c;去掉默认的一些其他配置&#xff0c;只保留auth部分 直接使用auth登录 docke…

淘宝商品信息一网打尽!深入探索item_get接口的高效应用

淘宝item_get接口技术详解 一、引言 淘宝的开放平台为开发者提供了丰富的API接口&#xff0c;其中item_get接口是用于获取淘宝商品详情的常用接口。通过这个接口&#xff0c;开发者可以获取到商品的标题、价格、描述、图片等关键信息&#xff0c;进而实现商品数据的抓取、分析…

如何完美解决 Xshell 使用 SSH 连接 Linux 服务器报错:找不到匹配的 host key 算法

&#x1f6e0;️ 如何完美解决 Xshell 使用 SSH 连接 Linux 服务器报错&#xff1a;找不到匹配的 host key 算法 摘要&#xff1a; 本文将带领大家深入学习如何解决 Xshell 使用 SSH 连接 Linux 服务器时报错“找不到匹配的 host key 算法”的问题。通过详细的操作步骤和代码案…

第12章:集合框架

第12章&#xff1a;随堂复习与企业真题&#xff08;集合框架&#xff09; 一、随堂复习 1. 数组存储数据方面的特点和弊端 数组存储多个数据方面的特点&#xff1a;> 数组一旦初始化&#xff0c;其长度就是确定的。> 数组中的多个元素是依次紧密排列的&#xff0c;有序的…

05-5.4.3 树和森林的遍历

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

Shopee虾皮API:获取商家店铺商品列表

一、平台介绍 Shopee&#xff0c;作为东南亚及中国台湾地区领先的电商平台&#xff0c;为卖家提供了一个便捷、高效的销售渠道。作为卖家&#xff0c;能够将自己的商品展示在Shopee平台上&#xff0c;并通过平台的流量和工具&#xff0c;将商品销售给更多的潜在买家。 为了帮…

系统架构设计师 - 操作系统(2)

操作系统 操作系统&#xff08;5-6分&#xff09;文件管理绝对路径与相对路径 ★索引文件 ★★★位示图 ★ 存储管理段页式存储 ★★★页式存储段式存储段页式存储&#xff08;了解&#xff09; 页面置换算法 ★ 微内核操作系统嵌入式操作系统 ★★★ 大家好呀&#xff01;我是…

数据库课设-中小企业工资管理系统

一、效果展示 二、后端代码 import string import random from flask import Flask, render_template, request, jsonify, redirect, session import pymysql from flask_cors import CORS import time import schedule from datetime import datetime import threading from …

HK1-BOX X3刷UBUNTU 24.04,并开启WIFI

端午刚好有点时间&#xff0c;顺便把改完散热的HK1-BOX刷了个最新OC版的UBUNTU 24&#xff0c;这里记录下操作的步骤&#xff1a; 准备材料 HK1-BOX S905X3&#xff1a;注意X4的不行固件没匹配的。建议先改完散热&#xff0c;不然作为7X24小时的机器长时间高温还是很伤硬件的…

Web前端项目-拼图游戏【附源码】

拼图游戏 拼图游戏是一种经典的益智游戏&#xff0c;通过HTML、CSS和JavaScript等前端技术的综合运用来实现&#xff1b;拼图游戏可以锻炼玩家的观察能力、空间认知能力和逻辑思维能力。游戏开始时&#xff0c;一张图片会被切割成多个小块&#xff0c;并以随机顺序排列在游戏区…

CMOS图像传感器——列噪声(CFPN)去除

目前CMOS 图像传感器系统中列共用结构应用最为广泛,在该结构中,虽然像素曝光均匀,但是由于列输出系统处理属性的变动,对于不同列,像素的输出是不均匀的。因此,基于列的CMOS 图像传感器表现出垂直条纹固定模式噪声(CFPN),从而降低了图像的质量。由于人眼 的关系,CFPN …

「布道师系列文章」宝兰德徐清康解析 Kafka 和 AutoMQ 的监控

作者&#xff5c;北京宝兰德公司解决方案总监徐清康 01 前言 当我们使用一个软件的时候&#xff0c;经常都会问这个软件怎么监控、监控他的哪些指标&#xff1f;Kafka 的监控挺长时间都是一个老大难的问题&#xff0c;社区在监控方面一直没有投入太大的精力。如果要实现一…

kotlin 中的字符串

一、字符类访问 1、字符串的访问跟js一样&#xff0c;可以使用索引来访问或者直接循环。 fun main() {val a: String "2024"// 方式一&#xff1a;for (item in a) {println(item) // 输出每一个字符}// 方式二&#xff1a;println("${a[0]}, ${a[1]}, ${a[2…

Leetcode 415. 字符串相加-大数相加

415. 字符串相加 - 力扣&#xff08;LeetCode&#xff09; class Solution {/**2024.6.17大数相加&#xff0c;从2个字符串最后一位开始加&#xff0c;如果没遍历到下标0&#xff0c;就一直遍历&#xff0c;减去‘a’得到数值&#xff0c;循环结束条件就是 字符串1遍历完了&am…

IAP固件升级进阶(Qt上位机)

前言 时隔近一年&#xff0c;再次接触IAP固件升级&#xff0c;这次修改了以前的一些bug&#xff0c;同时新增一些实用性的功能。 有纰漏请指出&#xff0c;转载请说明。 学习交流请发邮件 1280253714qq.com。 上位机界面 视频演示 当Up对iap固件升级的机制有了更深的理解后…

【C++】类和对象的引入

文章目录 前言一、类的定义二、类的访问控制与封装三、类的作用域四、类的实例化五、类的存储方式及大小计算六、隐藏的this指针 前言 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&…

Git与SSH

Git Git是一种分布式版本控制系统&#xff0c;最初由Linus Torvalds为管理Linux内核开发而设计并开发。Git可以帮助开发团队协作管理代码&#xff0c;跟踪代码变更历史&#xff0c;并在需要时回溯到特定版本。 分布式版本控制&#xff1a;每个开发者都可以拥有完整的代码仓库…

go使用ssh执行脚本文件

目的&#xff1a;在go语言中ssh连接服务器&#xff0c;上传shell文件并执行 代码&#xff1a; import "golang.org/x/crypto/ssh" func InitHardware(username string, password string, ip string, ipv6 string, port int, arch string, ipStack string, classTy…

算法题解记录29+++全排列(百日筑基)

一、题目描述 题目难度&#xff1a;中等 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示…