+++++背到厌倦。持续更新

Spring IoC 的工作流程:

  1. 读取 BeanDefinition: Spring 容器启动时,会读取 Bean 的配置信息 (例如 XML 配置文件、注解或 Java 代码),并将这些配置信息转换为 BeanDefinition 对象。
  2. 创建 Bean 实例: 根据 BeanDefinition 中的信息,Spring 容器使用反射机制创建 Bean 的实例。
  3. 解析依赖关系: Spring 容器解析 Bean 的依赖关系,找到 Bean 所依赖的其他 Bean。
  4. 注入依赖: Spring 容器使用依赖注入的方式,将依赖对象注入到 Bean 中。
  5. Bean 的生命周期管理: Spring 容器负责管理 Bean 的生命周期,包括初始化、使用和销毁。

自动装配的核心概念:

  • @EnableAutoConfiguration:

    • 这是一个复合注解,通常放在 Spring Boot 应用的启动类上。
    • 它启用了 Spring Boot 的自动配置机制。
    • 它实际上包含了 @AutoConfigurationPackage 和 @Import(AutoConfigurationImportSelector.class) 两个注解。
  • @AutoConfigurationPackage:

    • 它用于指定自动配置的基础包。
    • Spring Boot 会扫描该包及其子包下的所有组件 (例如 @Component@Service@Repository@Controller 等),并将它们注册为 Bean。
    • 通常情况下,@AutoConfigurationPackage 会自动扫描启动类所在的包作为基础包。
  • AutoConfigurationImportSelector:

    • 它是自动配置的核心组件。
    • 它负责扫描所有符合自动配置条件的类,并将它们导入到 Spring 容器中。
    • 它主要通过以下几个步骤来实现自动配置:
      1. 扫描 META-INF/spring.factories 文件: AutoConfigurationImportSelector 会扫描所有 jar 包中的 META-INF/spring.factories 文件。
      2. 加载自动配置类: spring.factories 文件中定义了大量的自动配置类,AutoConfigurationImportSelector 会加载这些类。
      3. 条件过滤: AutoConfigurationImportSelector 会根据一定的条件对自动配置类进行过滤,只有满足条件的自动配置类才会被导入到 Spring 容器中。
      4. 导入自动配置类: AutoConfigurationImportSelector 使用 @Import 注解将符合条件的自动配置类导入到 Spring 容器中。
  • 条件注解 (Conditional Annotations):

    • Spring Boot 提供了大量的条件注解,用于控制自动配置类的生效条件。

 MyBatis中一级缓存和二级缓存有什么差别?

1. 一级缓存 (Local Cache):

  • 作用域: SqlSession 级别。
  • 生命周期: 与 SqlSession 的生命周期相同。 当 SqlSession 关闭时,一级缓存也会被清空。
  • 存储介质: 内存。
  • 工作原理:
    • 当执行一个查询语句时,MyBatis 首先会从一级缓存中查找是否存在相同的 SQL 语句和参数。
    • 如果存在,则直接从一级缓存中返回结果,避免访问数据库。
    • 如果不存在,则访问数据库,并将查询结果放入一级缓存中。
    • 当执行更新、插入或删除语句时,MyBatis 会清空一级缓存,以保证数据的一致性。
  • 优点:
    • 提高查询性能,减少数据库访问次数。
    • 实现简单,无需额外配置。
  • 缺点:
    • 缓存范围小,只能在单个 SqlSession 中共享。
    • 并发性差,多个 SqlSession 之间无法共享缓存。
  • 默认开启: 一级缓存默认开启,无需手动配置。
  • 清空时机:
    • 执行更新、插入或删除语句时。
    • 手动调用 SqlSession.clearCache() 方法时。
    • SqlSession 关闭时。

2. 二级缓存 (Second Level Cache):

  • 作用域: Mapper 级别 (namespace 级别)。
  • 生命周期: 与应用程序的生命周期相同。
  • 存储介质: 可以配置为内存、磁盘或其他存储介质。
  • 工作原理:
    • 当执行一个查询语句时,MyBatis 首先会从二级缓存中查找是否存在相同的 SQL 语句和参数。
    • 如果存在,则直接从二级缓存中返回结果,避免访问数据库。
    • 如果不存在,则访问数据库,并将查询结果放入二级缓存中。
    • 当执行更新、插入或删除语句时,MyBatis 会清空二级缓存中与该语句相关的缓存区域,以保证数据的一致性。
  • 优点:
    • 提高查询性能,减少数据库访问次数。
    • 缓存范围大,可以在多个 SqlSession 之间共享。
    • 并发性好,多个 SqlSession 可以同时访问二级缓存。
  • 缺点:
    • 实现复杂,需要手动配置。
    • 数据一致性难以保证,需要谨慎使用。
  • 默认关闭: 二级缓存默认关闭,需要手动配置才能开启。
  • 清空时机:
    • 执行更新、插入或删除语句时,会清空与该语句相关的缓存区域。
    • 手动配置缓存刷新策略。
    • 应用程序关闭时。

 

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

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

相关文章

如何在Git历史中抹掉中文信息并翻译成英文

如何在Git历史中抹掉中文信息并翻译成英文 在软件开发和版本控制领域,维护一个清晰、一致的代码历史记录是至关重要的。然而,有时我们可能会遇到需要修改历史提交的情况,比如删除敏感信息或修正错误。本文将详细探讨如何在Git历史中抹掉中文…

21 天 Python 计划:MySQL中DML与权限管理

文章目录 前言一、介绍二、MySQL数据操作:DML2.1 插入数据(INSERT)2.1.1 插入完整数据(顺序插入)2.1.2 指定字段插入数据2.1.3 插入多条记录2.1.4 插入查询结果 2.2 更新数据(UPDATE)2.3 删除数…

微信小程序 -- 原生封装table

文章目录 table.wxmltable.wxss注意 table.js注意 结果数据结构 最近菜鸟做微信小程序的一个查询功能,需要展示excel里面的数据,但是菜鸟找了一圈,也没发现什么组件库有table,毕竟手机端好像确实不太适合做table! 菜鸟…

LangChain-输出解析器 (Output Parsers)

输出解析器是LangChain的重要组件,用于将语言模型的原始文本输出转换为结构化数据。本文档详细介绍了输出解析器的类型、功能和最佳实践。 概述 语言模型通常输出自然语言文本,但在应用开发中,我们经常需要将这些文本转换为结构化的数据格式…

【安全】加密算法原理与实战

为了理解SSL/TLS原理,大家需要掌握一些加密算法的基础知识。当然,这不是为了让大家成为密码学专家,所以只需对基础的加密算法有一些了解即可。基础的加密算法主要有哈希(Hash,或称为散列)​、对称加密(Symm…

MySQL 优化教程:让你的数据库飞起来

文章目录 前言一、数据库设计优化1. 合理设计表结构2. 范式化与反范式化3. 合理使用索引 二、查询优化1. 避免使用 SELECT *2. 优化 WHERE 子句3. 优化 JOIN 操作 三、服务器配置优化1. 调整内存分配2. 调整并发参数3. 优化磁盘 I/O 四、监控与分析1. 使用 EXPLAIN 分析查询语句…

LangChain4j(1):初步认识Java 集成 LLM 的技术架构

LangChain 作为构建具备 LLM 能力应用的框架,虽在 Python 领域大放异彩,但 Java 开发者却只能望洋兴叹。LangChain4j 正是为解决这一困境而诞生,它旨在借助 LLM 的强大效能,增强 Java 应用,简化 LLM 功能在Java应用中的…

Linux服务器安装百度飞桨3.0(pip docker)

Linux安装部署百度飞桨3.0 1.官方文档指引2.确认服务器型号2.1 确认Python版本2.2 确认pip是否安装2.3 确认计算平台 3.本机安装(基于通过 pip 安装)3.1 下载安装 PaddlePaddle3.2 安装PaddleX3.2.1 安装PaddleX3.2.2 命令行规范3.2.3 运行示例3.2.4 查看…

Spring Boot 自动加载流程详解

前言 Spring Boot 是一个基于约定优于配置理念的框架,它通过自动加载机制大大简化了开发者的配置工作。本文将深入探讨 Spring Boot 的自动加载流程,并结合源码和 Mermaid 图表进行详细解析。 一、Spring Boot 自动加载的核心机制 Spring Boot 的自动加…

2025年危化品安全管理人员备考指南|智能题库+核心考点解析

作为危化品生产单位安全管理人员(主要负责人),考试内容主要涵盖三大模块: 法律法规体系 《安全生产法》修订要点(2023版) 危险化学品重大危险源辨识标准(GB 18218) 最新《化工过…

如何优雅使用 ReentrantLock 进行加解锁:避免常见坑点,提高代码可维护性

引言:锁的基本概念和问题 在多线程编程中,为了确保多个线程在访问共享资源时不会发生冲突,我们通常需要使用 锁 来同步对资源的访问。Java 提供了不同的锁机制,其中 ReentrantLock 是一种最常用且功能强大的锁,它属于…

Redhat红帽 RHCE8.0认证体系课程

课程大小:7.7G 课程下载:https://download.csdn.net/download/m0_66047725/90546064 更多资源下载:关注我 红帽企业 Linux 系统的管理技能已经成为现代数据中心的核心竞争力。 Linux 在支持混合云、跨物理服务器、虚机、私有云和公共云计…

Shell脚本编程

目录 1. Shell脚本概述 什么是Shell? Shell的作用 常见的Shell类型 2. 环境搭建与安装 Linux系统 macOS系统 Windows系统 3.安装并配置Zsh(macOS/Linux) 4. Shell基础语法 变量与数据类型 输入交互 5. Shell脚本进阶 进程管理 …

学生管理系统(Python)

运行结果: 源代码: """ 项目:类似于学生管理系统---增删改查 """ #封装一个学生类 import random class Student: def __init__(self,stuid,name,score): self.stuid stuid self.name name self.score …

电商素材革命:影刀RPA魔法指令3.0驱动批量去水印,实现秒级素材净化

本文 去除水印实操视频展示电商图片水印处理的困境​影刀 RPA 魔法指令 3.0 强势登场​利用魔法指令3.0两步实现去除水印操作关于影刀RPA 去除水印实操视频展示 我们这里选择了4张小红书里面比较帅气的图片,但凡用过小红书的都知道,小红书右下角是会有小…

Seq2Seq - GRU补充讲解

nn.GRU 是 PyTorch 中实现门控循环单元(Gated Recurrent Unit, GRU)的模块。GRU 是一种循环神经网络(RNN)的变体,用于处理序列数据,能够更好地捕捉长距离依赖关系。 ⭐重点掌握输入输出部分输入张量&#…

设计模式-观察者模式和发布订阅模式区别

文章目录 其他不错的文章 二者有类似的地方,也有区别。 引用的文章说的已经比较清楚了,这里只列出对比图。 对比点观察者模式发布订阅模式中间人角色无事件中心,观察者直接订阅目标有事件中心,发布者与订阅者通过事件中心通信关系…

【SQL】基于多源SQL 去重方法对比 -- 精华版

【SQL】基于SQL 去重方法对比 -- 精华版 一、引言二、基于SQL去重方法完整对比1. MySQL去重方法及优劣势1.1 ​DISTINCT关键字1.2 GROUP BY子句1.3 UNION系列操作1.4 子查询 自关联 2. Hive去重方法及优劣势2.1 DISTINCT关键字2.2 ​GROUP BY子句2.3 ​ROW_NUMBER窗口函数2.4 …

电脑命名配置很高,为什么运行软件特别卡

估计很多同学都碰见过这种情况,以我的Redmi G为例,I9-14待CPU,又换了一条内存条,现有配置I9-14900,40G内存5200MT/s,4060显卡,为啥运行两个办公软件就卡的不行,风扇狂转,…

Spring Boot默认注册的转换器列表及其功能说明。这些转换器使得控制器方法可以直接接收Integer、Long、Date等类型参数,无需手动实现转换

以下是Spring Boot默认注册的转换器列表及其功能说明。这些转换器使得控制器方法可以直接接收Integer、Long、Date等类型参数,无需手动实现转换: 默认转换器列表及功能 1. 基础类型转换器 转换器名称功能示例场景StringToIntegerConverter将字符串转换…