Mybatis部分笔记二——Spring:

Spring

spring是轻量级的,IOC和AOP的一站式java开发框架,简化企业级开发。

其中:

轻量级:框架体积小(核心模块),

IOC:Inversion of Control(控制反转),把创建对象的控制权,反转给Spring框架。

以前程序中需要对象,都是自己new,

例如:new StudentDao对象。

AOP:Aspect Oriented Programming(面向切面编程)

将程序中的一些公共的非业务代码分离提取出来,然后在业务代码执行时,给他们横切进来。

底层使用动态代理机制,在我们的业务代码中,不显示的调用,但在执行业务代码,会通过代理对象,调用非业务代码。

一站式:除了核心的ICO和AOP功能外,还对数据访问层,web层都有封装,所以是一站式的。

Spring bean管理

bean对象,由于把对象交给spring对象交给spring管理后,spring会对对象进行功能的增强,所以在spring框架中生成的对象,统一称为bean对象。

区分这个对象还是我们自己new的还是spring框架生成的。

spring 中 bean管理有两种方式
​ 1.基于xml配置方式
在spring的配置文件注册需要spring框架管理的类使用bean标签,配置需要让spring管理的类1.基于xml配置方式id="对象名称,可以在getBean中获得spring生成的对象"class="需要让spring管理的类的地址"scope="配置bean的作用域”scope="singleton" 单例的 在spring框架启动时,就创建对象,而且始终只创建了一个对象.默认是scope="prototype" 原型(多例),在每次获得对象时,创建对象IOC 指的是让spring框架创建对象,创建对象的同时,还有一个动作,称为依赖注入依赖注入:在创建对象时,为对象中属性赋值注入两种方法:1.通过属性注入,属性的set方法<bean id="admin"  class="com.ffyc.springpro.model.Admin" scope="prototype" ><property name="account" value="张三"></property><property name="password" value="123"></property></bean>2.通过构造方法注入<bean id="admin" class="com.ffyc.springpro.model.Admin" scope="prototype"><constructor-arg name="account" value="张三"></constructor-arg><constructor-arg name="password" value="123"></constructor-arg></bean><bean id="adminDao" class="com.ffyc.springpro.dao.AdminDao"></bean><bean id="adminService" class="com.ffyc.springpro.service.AdminService"><property name="adminDao" ref="adminDao"></property></bean>
2.基于注解

bean管理和自动注入

自动注入有两种匹配值的方式:
     1.通过属性的类型查找(默认使用)
      2.对象的名字查找

​
/*开启spring注解扫描功能   扫描指定的包spring 注解方式bean管理,  自动注入
@Autowired  是spring框架提供的注解用于属性和属性的set方法上,如果写在属性上,set方法都可以不需要默认情况下,要注入的值不能为空   required=true自动注入有两种匹配值的方式:1.通过属性的类型查找(默认使用)2.对象的名字查找@Qualifier(value = "adminDao")@Resource(name = "adminDao")  是Java语言里提供的注解也是添加在属性上,不需要写set方法注入的值也不能为空也可以通过类型查找要注入的对象也可以通过名字来查找要注入的对象*/​
IOC:

反转控制,不是具体的技术,是一种设计。

把生成对象的控制权,反转给spring框架,spring框架负责管理对象的整个生命周期过程。

对外提供获取对象的方法,在程序中哪里需要,在那里获取即可。

AOP:

AOP:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 ​ AOP是OOP的延续,是软件开发中的一个热点,是java开发中的一个重要内容。利用AOP可以对业务逻辑和非业务逻辑进行隔离,从而使得各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 面向切面编程的好处就是:减少重复,专注业务; 核心原理: ​ 使用动态代理的方式在执行方法前后或者出现异常的时候做加入相关的逻辑. 使用案例: ​ 事务处理:开启事务,关闭事务,出现异常后回滚事务 ​ 权限判断:在执行方法前,判断是否具有权限.

面向切面编程:面向切面编程是对面向对象编程的补充延续。

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

好处:模块间的耦合度降低了

原理:动态代理模式,给业务代码生成代理对象。

AOP编程思想是java中的,不是spring专有的,是spring使用AOP这一编程思想.
 

Spring事务管理

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

数据库事务管理是对一次数据库操作过程中执行的多条语句进行管理,确保一次操作过程中的多条sql要么都执行成功,要么都不执行,从而确保数据的一致性。

spring事务管理是spring框架对事务提交这一功能进行封装,程序员在业务开发中不需要显示的提交事务。

Spring中的事务管理分两种形式:
1.编程式事务管理:需要程序员在代码中自己控制事务提交和回滚.
2.声明式事务管理:

声明事务底层使用了AOP思想,可以为方法添加事务功能,他的控制是方法级别的。

声明式事务不生效场景:

1@Transactional 应用在非 public 修饰的方法上。

2..方法中的异常被 catch 捕获,导致认为方法没有而失效,导致数据提交。

3.出现编译期异常,还是会提交事务 @Transactional后加上(rollbackFor = Exception.class)碰到所有异常都会生效回滚。

4.数据库引擎不支持事务 mysql中只有innodb引擎支持事务的。

@Transactional//声明事务管理标签  一般添加到service层的方法上,不建议加Dao层上,因为一个service层的方法可能会调用多个Dao层的方法
public void insertAdmin(){adminDao.insert1();/*不生效场景3@Transactional后加上(rollbackFor = Exception.class),就可正常生效了"aa".getBytes("utf-888");//编译期异常,会让Spring事物管理失效,insert1会执行。*///System.out.println(10/0);adminDao.insert2();/*不生效场景2try {System.out.println(10/0);adminDao.insert2();}catch (Exception e){e.printStackTrace();}*///adminDao.insert("王天乐诗人我吃");
}

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

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

相关文章

Debian Linux上安装Jumpserver

1.安装 Debian并配置 登录www.debian.io,下载网络版安装&#xff0c;安装很快&#xff0c;但完成后修改IP就遇到问题vi /etc/network/interfaces auto eth0 #设置开机自动连接网络 iface lo inet loopback allow-hotplug eth0 iface eth0 inet static #static表示使用固定I…

数分基础(03-3)客户特征分析--Tableau

文章目录 客户特征分析 - Tableau1. 说明2. 思路与步骤3. 数据准备和导入3.1 用EXCEL初步检查和处理数据3.1.1 打开3.1.2 初步检查&#xff08;1&#xff09;缺失值检查缺失值处理 &#xff08;2&#xff09;格式化日期字段&#xff08;3&#xff09;其他字段数据类型 &#xf…

一 lua学习笔记:概述

一 概述 Lua 语言是一种动态类型语言( Dynamically-typed language ),在这种语言中没有类型定义( type definition ),每个值都带有其自身的类型信息。 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程…

MySQL5.7.36之主从复制部署安装-centos7

主库是192.168.31.209:3306 从库是192.168.31.210:3308、192.168.31.209:3307、192.168.31.210:3309、192.168.31.211:3310、192.168.31.211:3311 切记&#xff1a;不管是主库还是从库&#xff0c;server_id一定不能重复 1、主库创建复制账号及授权 create user repl% iden…

【vscode】vscode+cmake+llvm+ninja开发环境的搭建(draft)

文章目录 前言1 软件、工具和插件安装1.1 vscode安装1.2 cmake安装1.3 安装LLVM1.4 安装Ninja1.5 vscode插件安装 2 工具链和CMakeLists2.1 工具链&#xff08;toolchain.cmake&#xff09;2.2 CMakeLists.txt2.3 基本语法注释 前言 本文是一个使用vscode的小白扫盲贴。 所谓工…

科讯档案管理系统存在SQL注入漏洞(0day)

漏洞描述 安徽科迅教育装备20年来来始终坚持智慧校园集成方案产品的开发和部署应用&#xff0c;我们有完善的智慧校园和数字校园建设方案&#xff0c;根据不同的学校不同的实际情况量身定做系统集成方案。产品主要是为了实现校园的智慧网络、智慧OA、智慧教学、智慧学习、数字医…

.NET Razor类库-热加载 就是运行时编译

1.新建3个项目 1.1 一个.NET Standard2.1项目 IX.Sdk.SvnCICD4NuGet 1.2 一个.NET Razor类库项目 IX.Sdk.SvnCICD4NuGet.RazorWeb 1.3 一个.NET6 Web项目 IX.Sdk.SvnCICD4NuGet.Web 这3个项目的引用关系 Web引用 Razor类库 和 .NET Standard2.1 Razor类库引用.NET Standard2.1…

数据同步大冒险:PostgreSQL到MySQL的奇妙之旅

引言&#xff1a;一场跨数据库的浪漫邂逅 &#x1f491; 在数据的世界里&#xff0c;不同数据库系统就像是来自不同星球的恋人&#xff0c;它们各自拥有独特的魅力&#xff0c;但偶尔也会渴望一场跨越界限的亲密接触。今天&#xff0c;我们就来见证一场PostgreSQL与MySQL之间的…

基于RK3588+MCU智能清洁车应用解决方案

智能清洁车应用解决方案 在智慧城市建设发展的过程中&#xff0c;智慧环卫是打造智慧城市的重要组成部分&#xff0c;智能清洁车作为实现环卫智能化、提升作业效率和服务质量的关键工具&#xff0c;发挥着不可或缺的作用。 智能清洁车集成了激光雷达、双目视觉、多重传感器以及…

【drools】kie:官方仓库clone 遇到问题解决

git clone https://github.com/kiegroup/drools.git这个与apache的还有不同。代码比较多,考验代理能力 zhangbin@LAPTOP-Y9KP MINGW64 /d/Future $ rm -rf drools/zhangbin@LAPTOP-Y9KP MINGW64 /d/Future $ git clone https://github.com/kiegroup/drools.git Cloning into …

无线通信频率分配

首先看看无线电信号的频谱如何划分&#xff1a; 一、5G NR 3GPP已指定5G NR 支持的频段列表&#xff0c;5G NR频谱范围可达100GHz&#xff0c;指定了两大频率范围&#xff1a; ① Frequency range 1 &#xff08;FR1&#xff09;&#xff1a;就是我们通常讲的6GHz以下频段 频率…

uniapp uni-popup底部弹框留白 底部颜色修改 滚动穿刺

做底部弹框的时候&#xff0c;可能出现以下场景需要处理。 一、出现底部留白不是白色&#xff0c;需要修改颜色的时候&#xff1a; 1、如果弹框不需要圆角效果&#xff0c;则在uni-popup加上背景色就行&#xff0c;弹框是个直角样式&#xff1a; 2、如果需要圆角效果&#xff0…

CSS3页面布局-三栏-中栏流动布局

三栏-中栏流动布局 用负外边距实现 实现三栏布局且中栏内容区不固定的核心问题就是处理右栏的定位&#xff0c; 并在中栏内容区大小改变时控制右栏与布局的关系。 控制两个外包装容器的外边距&#xff0c;一个包围三栏&#xff0c;一个包围左栏和中栏。 <!DOCTYPE html&…

【vue、Electron】搭建一个Electron vue项目过程、将前端页面打包成exe 桌面应用

文章目录 前言使用 electron-vue 创建项目1. 安装 vue-cli&#xff08;如果未安装&#xff09;2. 使用 electron-vue 模板创建项目3. 安装和配置 electron-builder4. 运行Electron项目5. 打包应用 可能遇到的问题解决Electron vue首次启动巨慢无法加载执行npm run electron:bui…

grid布局实现移动端H5响应式排列正方形格子布局

grid布局实现移动端H5响应式排列正方形区域 grid布局&#xff1a;CSS Grid 网格布局教程在 CSS 中&#xff0c;padding-top 的百分比值是相对于元素自身的宽度&#xff0c;而不是高度。这是 CSS 规范中的一个特性&#xff0c;所有的 padding 和 margin 的百分比值都是相对于元…

客服系统简易版

整体架构解读 客服端和商城端都通过websocket连接到客服系统, 并定期维持心跳当客户接入客服系统时, 先根据策略选择在线客服, 然后再发送消息给客服 websocket实现 用netty实现websocket协议, 增加心跳处理的handler, 详见chat-server模块 客服路由规则 暂时仅支持轮询的…

python 和C通过共享内存通信

C 接收数据 #include <stdio.h> #include <stdlib.h> #include <sys/shm.h> #include <string.h> #include <time.h> #include <sys/time.h>#define SHAERD_MEM_SIZE 20 * 1024 * 1024 // 20MBytes #define ImgWidth 1024 #define ImgHeig…

上新!Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型&#xff1b; 2.多图输出、多指标输出(MAE、RMSE、MSE、R2)&#xff0c;多输入单输出&#xff0c;含不同置信区间图、概率…

出现Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错

目录&#xff1a; bug Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错解决方法 bug Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty 报错 在一个springboot demo启动的时候出现以下错误 &#xff0c;…

中国城市经济韧性数据集(2007-2022年)

数据来源&#xff1a;数据来自历年《中国城市统计NJ》、各省市《统计NJ》及《中国区域经济统计NJ》 时间范围&#xff1a;2007-2022年 数据范围&#xff1a;中国地级市样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff08;原始数据计算代码最终数据&…