spring初识

Spring

Spring IOC

IOC ----控制反转

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法

怎么理解控制反转

  • 谁控制谁,控制什么

传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

  • 为何是反转,哪些方面反转了 ?

有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

什么是循环依赖?

循环依赖就是循环引用,两个或以上的 bean 相互持有对方。比如说 beanA 引用 beanB , beanB 引用 beanCbeanC 引用 beanA , 它们之间的引用关系构成一个环。

循环依赖的类型

一、自依赖

在这里插入图片描述

二、直接依赖

在这里插入图片描述

三、间接依赖

在这里插入图片描述

循环依赖要解决的问题

容器先创建 A,发现依赖于 B,再创建 A,又发现依赖于 B … ,发生无限死循环,最后发生栈溢出错误,程序停止。

三级缓存

三级缓存数据结构

	// 从上至下 分表代表这“三级缓存”private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); //一级缓存private final Map<String, Object> earlySingletonObjects = new HashMap<>(16); // 二级缓存private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16); // 三级缓存

三级缓存存的什么?

singletonObjects:用于存放完全初始化好的 bean,从该缓存中取出的 bean 可以直接使用,成品bean
earlySingletonObjects:提前曝光的单例对象的cache,存放原始的 bean 对象(尚未填充属性),半成品bean,用于解决循环依赖,
singletonFactories:单例对象工厂的cache,存放 bean 工厂对象,用于解决循环依赖。

AOP

AOP概念

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

Spring AOP场景

权限管理、异常处理、操作日志、事务控制。

AOP的作用及其优势

作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强。

优势:减少重复代码,提高开发效率,并且便于维护。

AOP 的底层实现

实际上,AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。

Autowired和Resource的关系

相同点

两个注解的功能基本是等价的,他们都可以将bean注入到对应的field中

不同点

  1. 来源不同:@Autowired是Spring提供的注解,而@Resource是JavaEE提供的注解。
  2. 注入方式不同:@Autowired默认按照类型(byType)进行装配,如果找到多个匹配类型,则会根据变量名或属性名进行匹配;而@Resource默认按照名称(byName)进行装配,如果找不到与名称完全匹配的bean,则会抛出异常。
  3. 支持范围不同:@Autowired只支持Spring容器中的bean自动装配;而@Resource可以同时使用在Spring容器和JavaEE容器中。

spring的作用域

  1. 单例(Singleton)作用域:在整个应用程序中只存在一个Bean实例,Spring容器负责创建并管理其生命周期。
  2. 原型(Prototype)作用域:每一次请求(将其注入到另一个bean中,或执行getBean()方法)都会产生一个新的bean实例,相当于new操作。
  3. 会话(Session)作用域:每个用户会话对应一个Bean实例,在用户会话期间保持。
  4. 请求(Request)作用域:每个HTTP请求对应一个Bean实例,并且仅在当前请求处理期间有效。
  5. 全局会话(Global Session)作用域:仅适用于基于Web的应用程序,类似于会话作用域,但仅在全局HTTP会话中有效。
  6. 线程(Thread)作用域:在同一线程上下文中共享Bean实例,适用于多线程环境。

根据应用程序的需求,选择适当的作用域可以管理Bean的生命周期、控制资源消耗和确保正确的状态管理。

spring事务怎么用?

通过在方法上添加@Transactional注解,可以轻松实现Spring的事务管理,保证数据一致性和业务的完整性。

spring事务的原理?

Spring的事务管理通过AOP和动态代理,将事务管理逻辑与业务逻辑解耦,使得开发者能够更加专注于业务实现,同时保证了事务的一致性和完整性。

spring的事务传播级别

  1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果没有事务,则创建一个新的事务。
  2. SUPPORTS:如果当前存在事务,则加入该事务;如果没有事务,则以非事务方式执行。
  3. MANDATORY:必须存在一个当前的事务,否则将抛出异常。
  4. REQUIRES_NEW:创建一个新的事务,并挂起当前事务(如果存在)。
  5. NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则将其挂起。
  6. NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
  7. NESTED:如果当前存在事务,则在嵌务中执行;如果没有事务,则创建一个新的事务。

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

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

相关文章

自然语言处理---RNN经典案例之使用seq2seq实现英译法

1 seq2seq介绍 1.1 seq2seq模型架构 seq2seq模型架构分析&#xff1a; seq2seq模型架构&#xff0c;包括两部分分别是encoder(编码器)和decoder(解码器)&#xff0c;编码器和解码器的内部实现都使用了GRU模型&#xff0c;这里它要完成的是一个中文到英文的翻译&#xff1a;欢迎…

TCP的三次握手、四次挥手!就像打电话一样简单!

目录 学前必会 三次握手详解 和打电话一样 为什么必须要三次&#xff1f; 四次挥手详解 和挂电话一样 为什么要四次挥手&#xff1f; 第四次为何要等待 2*MSL&#xff1f; 相关面试题&#xff1a; 说一下三次握手、四次挥手的过程三次握手四次挥手的目的是什么&#x…

Java拦截器(Interceptor)和过滤器(Filter)实例详解

一、Java过滤器和拦截器 1.1、过滤器(Filter) Filter过滤器&#xff0c;是Servlet&#xff08;Server Applet&#xff09;技术中的技术&#xff0c;开发人员可以通过Filter技术&#xff0c;管理web资源&#xff0c;可以对指定的一些行为进行拦截&#xff0c;例如URL级别的权限…

Mysql创建视图中文乱码修改docker里的配置

问题现象&#xff1a; 创建的视图查询无数据&#xff0c;查看创建语句得知&#xff0c;where条件里的中文变成了“???”。 在客户端里查询字符编码&#xff1a; show VARIABLES like %char%;就是character_set_server导致的&#xff0c;它配置的竟然不是utf8&#xff0c;…

【数据结构】线性表(十)队列:循环队列及其基本操作(初始化、判空、判满、入队、出队、存取队首元素)

文章目录 队列1. 定义2. 基本操作 顺序队列循环队列1. 头文件和常量2. 队列结构体3. 队列的初始化4. 判断队列是否为空5. 判断队列是否已满6. 入队7. 出队8. 存取队首元素9. 获取队列中元素个数10. 打印队列中的元素9. 主函数10. 代码整合 堆栈Stack 和 队列Queue是两种非常重要…

结构体学习

struct是结构体关键字 我们用C语言中通常都是用关键字来定义类型变量。例如我们的整型变量&#xff0c;int book;是用整型关键字定义出来的。同样的&#xff0c;struct book同样是一个类型&#xff0c;不过我们叫他结构体。我认为的结构体的作用&#xff0c;无外乎是将一些毫…

文件打包下载excel导出和word导出

0.文件下载接口 请求 GET /pm/prj/menu/whsj/download/{affixId} 文件affixId多个id以逗号隔开。多个文件会以打包得形式。 1.Excel导出 1.0接口 POST 127.0.0.1:8400/pm/io/exportExcel/year-plan-table-workflow/report 参数 [{"org":"011","re…

JSX看着一篇足以入门

JSX 介绍 学习目标&#xff1a; 能够理解什么是 JSX&#xff0c;JSX 的底层是什么 概念&#xff1a; JSX 是 javaScriptXML(HTML) 的缩写&#xff0c;表示在 JS 代码中书写 HTML 结构 作用&#xff1a; 在 React 中创建 HTML 结构&#xff08;页面 UI 结构&#xff09; 优势&a…

HarmonyOS开发:Log工具类源码分析

前言 一转眼就十月中旬了&#xff0c;国庆的劲真大&#xff0c;到现在还未缓过来&#xff0c;以至于要更新的文章迟迟未发布&#xff0c;大家可以看到&#xff0c;最近一段时间的文章&#xff0c;都是关于HarmonyOS相关的&#xff0c;两个原因吧&#xff0c;一是我司有这样的任…

操作系统——死锁及其解决方案(p38-p41王道视频、课本ch6)

1.死锁的“知识框架”&#xff1a; 2.“预防死锁”——破坏死锁的4个必要条件: 3.避免死锁&#xff01;&#xff01;&#xff01;&#xff01;——必考&#xff1a;银行家算法 安全性算法描述&#xff1a; 4.“死锁的检测和解除”:

CVer从0入门NLP(一)———词向量与RNN模型

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

h5的扫一扫功能 (非微信浏览器环境下)

必须在 https 域名下才生效 <template><div><van-field label"服务商编码" right-icon"scan" placeholder"扫描二维码获取" click-right-icon"getCameras" /> <div class"scan" :style"{disp…