Spring框架基础介绍2.0

目录

AOP概述

面向切面思想

优点:

核心原理:

使用案例:

AOP 的基本概念

springAOP 实现

AspectJ 中常用的通知

Spring事物管理

数据库事务管理?

spring 事务管理?

Spring中的事物管理分为两种形式:

1、编程式事物管理

2、声明式事务管理

基于注解实现的 spring 事务管理

声明式事务失效场景:


AOP概述

AOP 为 Aspect Oriented Programming (面向切面编程),通过预编译方式运行期间动态代理实现程序功能的统一维护的一种技术。

面向切面思想

是将程序中 非业务代码(提交事务,打印日志,权限验证,统一异常处理等)提起分离出来,然后在调用业务代码时,通过一个代理对象帮助我们调用这些提取出来的非业务代码,这样在业务代码中,就不用 显示的调用非业务代码。做到业务代码和非业务代码的分离,降低了代码的 耦合度
面向切面编程:是对面向对象编程的补充延续。

OOP:就是一种战略层面。

AOP:就是一种战术层面。

他们解决的问题是不一样的。

AOP 是 OOP 的延续,是软件开发中的一个热点,是 java 开发中的一个重要内
容。利用 AOP 可以对业务逻辑和非业务逻辑进行隔离,从而使得各部分之间的
耦合度降低,提高程序的可重用性,同时提高了开发的效率。

优点:

面向切面编程的好处就是: 减少重复,降低模块之间的耦合度,专注业务;

核心原理:

使用 动态代理 的方式在执行业务代码的方法前后或者出现异常的时候做加入相关的逻辑.

使用案例:

        事务处理:开启事务,关闭事务,出现异常后回滚事务。
        权限判断:在执行方法前,判断是否具有权限。
        日志:在执行前进行日志处理。

AOP 的基本概念

连接点(Joinpoint): 类中可以被增强(加功能)的方法,这个方法就被称为链接点。
切入点(pointcut):类中实际被增强的方法。 类中有很多方法可以被增强,但例如:实际中只有 add 和 update 被增了,那么 add 和 update 方法就被称为切入点(实际实现的链接点)。
通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。
(通知分为方法执行前通知,方法执行后通知,环绕通知等。)
目标(Target): 代理的目标类(连接点和切入点所在的类)。
代理(Proxy): 向目标对象应用通知时创建的代理对象。

springAOP 实现

对于 AOP 这种编程思想,很多框架都进行了实现。Spring 就是其中之一, 可以完成面向切面编程。
AspectJ 是一个基于 Java 语言的 AOP 框架,它提供了强大的 AOP 功能,且其实
现方式更为简捷,使用更为方便, 而且还支持注解式开发。所以,Spring 又 将 AspectJ 的对于 AOP 的实现也引入到了自己的框架中

AspectJ 中常用的通知

有五种类型:前置通知,后置通知,返回通知,环绕通知,异常通知.
@Before 前置通知:方法执行之前
@After 后置通知:方法执行之后,无论是否出现异常
@AfterReturnning 返回通知:方法成功执行之后通知,出现异常不执行
@AfterThrowing 异常通知:抛出异常之后通知
@Around 环绕通知:方法执行前后都有通知
@AfterThrowing 异常通知:抛出异常之后通知。

 

@Around 环绕通知:方法执行前后都有通知。

Spring事物管理

事物管理本质上是数据库提供的一种管理机制。

数据库事务管理?

      数据库事务管理就是对一次数据库操作过程中执行的多条语句进行管理,
证一次对数据库操作过程中多条 sql 要么都执行成功,要么都不执行,从而确保数
一致性。
      我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步
操作的结合。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异
常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成
功操作数据的并不可靠,需要在这种情况下进行回退。
      事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操
作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态,这些
操作要么都完成,要么都取消,从而保证数据满足一致性的要求。

spring 事务管理?

      Spring 事务管理就是 spring 框架对事物提交这一功能进行封装,针对程序中提交事务这部分非业务代码进行分离管理,减轻程序员负担。程序员在业务开发中不需要显示的提价事物。在程序执行没有问题时,提交事务,出现问题时,回滚事务。

Spring中的事物管理分为两种形式:

1、编程式事物管理
        在项目中很少使用,这种方式需要在我们代码中需要提交事务或回滚事务时 自己写代码实现。
2、声明式事务管理
       建立在 AOP 基础上,本质是对方法前后进行拦截,所以声明式事务是方法级别的。
声明事物底层使用了AOP思想,可以为方法添加事物功能。
基于注解实现的 spring 事务管理
Spring 框架,提供事物管理实现类是 DataSourceTransactionManager.
配置事物管理器以及添加注解方式
然后在类或方法上使用@Transactional 标签即可。
要么全部执行,要不全部不执行。
@Transactional 可以添加在方法上,也可以添加到关上面,。
如果添加到类上面,此类中所有的方法都在spring事务管理中进行。
声明式事务失效场景:
     1.@Transactional用在非public方法上2.方法中的异常被catch捕获了,认为方法没有异常3.方法中出现编译期异常,还是会提交事务   可以将rollbackFor = Exception.class这样所有的异常都会回滚。4.数据库引擎不支持事务,mysql中只有innodb引擎支持事务的。

@持续更新ing..... 

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

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

相关文章

React入门教程:创建你的第一个React应用

React 是由 Facebook 开发的用于构建用户界面的 JavaScript 库。它以其高效、灵活和组件化的特性受到开发者的广泛欢迎。如果你是前端开发新手,或是从其他框架转向 React,这篇文章将引导你创建一个简单的 React 应用,帮助你快速上手。 1. 环…

低空经济如此火爆,新手如何分一杯羹?

低空经济的火爆为新手提供了诸多参与和分一杯羹的机会。以下是一些具体的建议,帮助新手在这一领域找到切入点: 1. 了解行业概况与趋势 定义与范围:低空经济是指在3000米以下空域内进行各种有人和无人驾驶航空器活动的经济形态,涉…

dubbo的SPI机制

一.dubbo的SPI机制 SPI机制是一个服务发现机制,通过接口的全限定名找到指定目录下对应的文件,然后加载对应的实现类注册到系统中进行使用。 在Java原生跟mysql的驱动加载也使用了这个机制,但是他们只能进行全部实现类的加载(遍历…

mysql创建新表,同步数据

import os import argparse import glob import cv2 import numpy as np import onnxruntime import tqdm import pymysql import time import json from datetime import datetime os.environ[“CUDA_VISIBLE_DEVICES”] “0” # 使用 GPU 0 def get_connection(): “”“创…

最新HTML5中的文件详解

第5章 HTML5中的文件 5.1选择文件 可以创建一个file类型的input,添加multiple属性为true,可以实现多个文件上传。 5.1.1 选择单个文件 1.功能描述 创建file类型input元素,页面中不再有文本框,而是 选择文件 按钮,右侧是上次文件的名称&a…

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark…

解析 MySQL 数据库的 Python 接口:`mysqlclient` 与 `django-mysql` 实战指南20240904

博客标题:深入解析 MySQL 数据库的 Python 接口:mysqlclient 与 django-mysql 实战指南 引言 在现代 Web 开发中,数据库与应用程序的交互是不可避免的核心环节。对于使用 Python 尤其是 Django 框架的开发者来说,如何有效地与 M…

线性因子模型 - 概率PCA和因子分析篇

序言 在探索数据科学与机器学习的浩瀚领域中,深度学习作为一股不可小觑的力量,正以前所未有的方式重塑着我们对数据处理与知识发现的理解。在这一宏大的框架下,概率主成分分析( Probabilistic PCA, pPCA \text{Probabilistic PCA…

Python3中dict字典类型的用法

字典是另一种可变容器模型,且可存储任意类型对象。 key与value 允许存储任意类型对象 但key 不支持 list列表、字典等可变类型 字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 1、定义字典…

数据分析面试题:客户投保问题分析

目录 0 场景描述 1 数据准备 2 问题分析 2.1 计算小微公司的平均经营时长 2.2 计算小微公司且角色为投保人,保险起期在18年的总保费 2.3 假设,DWD_CUSTOMER_REL客户关联关系表中,存在部分客户保单数很多,部分客户保单数很少的情况,此时DWD_CUSTOMER_BASE表关联,程序…

鸿蒙OS试题

60当您开始开发一个应用/服务时,首先需要根据工程创建向导,创建一个新的工程,工具会自动生成对应的代码和资源模板。关于新建工程,下列选项说法正确的是? A.、创建用于Lite Wearable设备的工程,可以选择Native C工程…

百度智能云向量数据库创新和应用实践分享

本文整理自第 15 届中国数据库技术大会 DTCC 2024 演讲《百度智能云向量数据库创新和应用实践分享》 在 IT 行业,数据库有超过 70 年的历史了。对于快速发展的 IT 行业来说,一个超过 70 年历史的技术,感觉像恐龙一样,非常稀有和少…

Anaconda Prompt 安装paddle2.6报错

bug描述 python 3.11.9 通过 pip install paddlepaddle2.6.1 安装后,运行 paddle.utils.run_check() 则出现下面的错误: 解决办法 方法一:使用paddle 3的版本 这里要注意我的python版本 方法二:使用低版本的python python3.9…

[项目][CMP][直接向堆申请页为单位的大块内存]详细讲解

目录 1.系统调用 1.系统调用 Windows和Linux下如何直接向堆申请页为单位的大块内存&#xff1a; VirtualAllocbrk和mmap // 直接去堆上按页申请空间 static inline void *SystemAlloc(size_t kpage) { #ifdef _WIN32void *ptr VirtualAlloc(0, kpage << 13, MEM_COMM…

Lombok jar包引入和用法

大家好&#xff0c;今天分享一个在编写代码时的快捷方法。 当我们在封装实体类时&#xff0c;会使用set、get等一些方法。如下图&#xff0c;不但费事还影响代码的美观。 那么如何才能减少代码的冗余呢&#xff0c;首先lib中导入lombok的jar包并添加库。 此处我已导入&#xf…

Jenkins+Svn+Vue自动化构建部署前端项目(保姆级图文教程)

目录 介绍 准备工作 配置jenkins 构建部署任务 常见问题 介绍 在平常开发前端vue项目时,我们通常需要将vue项目进行打包构建,将打包好的dist目录下的静态文件上传到服务器上,但是这种繁琐的操作是比较浪费时间的,可以使用jenkins进行自动化构建部署前端vue 准备工作 准备…

如何设计实现完成一个FPGA项目

设计并完成一个FPGA项目是一个复杂但非常有价值的工程任务。以下是一个详细的步骤指南,帮助你从零开始完成一个FPGA项目。 1. 项目定义与需求分析 确定项目目标:明确项目要实现的功能和性能指标。需求分析:列出所有功能需求、性能需求、接口需求等。可行性分析:评估技术可…

Linux操作系统命令集(一)

最近开了操作系统的课&#xff0c;弄着虚拟机的linux系统命令学学 文件和目录操作命令&#xff1a; ls&#xff1a;列出目录内容 示例&#xff1a;ls -l 以长格式列出目录内容cd&#xff1a;切换目录 示例&#xff1a;cd /home/user 切换到 /home/user 目录mkdir&#xff1a;…

《粮食科技与经济》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《粮食科技与经济》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《粮食科技与经济》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a; 湖南省粮食和物资储备局 …

bat批处理实现从特定文件夹中提取文件内容并以父文件夹名存储

1、需求分析 标题是bat批处理实现从特定文件夹中提取文件内容并以父文件夹名存储。这里面我们要做的工作是&#xff1a; ①、批处理脚本使用的是bat文件&#xff1b; ②、文件夹下面有很多子文件夹&#xff0c;然后子文件夹下仍然有相同的文件结构&#xff0c;我们需要从三级…