当前位置: 首页 > news >正文

SpringBean模块(一)定义如何创建生命周期

一、介绍

1、简介

在 Spring 框架中,Bean 是指由 Spring 容器 管理的 Java 对象。Spring 负责创建、配置和管理这些对象,并在应用程序运行时对它们进行依赖注入(Dependency Injection,DI)。

通俗地讲,Spring Bean 就是 Spring 容器中的一个组件,它可以是一个普通的 Java 类,但被 Spring 管理起来后,就称为 "Bean"。

2、核心特点

  • 由 Spring 容器管理

    Bean 的生命周期由 Spring 负责,不需要手动创建和销毁。
  • 通过依赖注入(DI)管理对象

    Spring 自动为 Bean 注入所需的依赖,减少代码耦合。
  • 可以是任何 Java 对象

    普通 Java 类、Service、Repository、Controller 都可以是 Spring Bean。

二、如何创建 Spring Bean

有几下几种方法:

1、自动扫描(使用 @Component及其派生注解

Spring 提供了一系列注解(@Component@Service@Repository@Controller),用于标识一个类是 Spring Bean:

见注解篇

Springbean(二)@Component及其派生注解自动注入(1)介绍和规范_component 注入-CSDN博客

Springbean(二)@Component及其派生注解自动注入(2)使用注意和加载问题-CSDN博客

(1)注册

@Component 让 Spring 在 类路径扫描(Component Scanning) 时自动发现该类并注册为 Bean。

import org.springframework.stereotype.Component;@Component // 让 Spring 扫描并管理这个类
public class MyBean {public void sayHello() {System.out.println("Hello, Spring Bean!");}
}
 (2)使用

使用 @Autowired 注入 Bean

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class MyService {@Autowiredprivate MyBean myBean; // 依赖注入public void doSomething() {myBean.sayHello();}
}
2、手动注册 Bean(使用 @Bean

如果不能修改原始类(例如第三方库),可以使用 @Bean 方法在 @Configuration 类中手动注册。

(1)注册
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyConfig {@Beanpublic MyBean myBean() {return new MyBean(); // 手动创建 Bean}
}
(2)使用

  同上

3、传统方式(在 XML 配置中定义 Bean)

(1)注册

  Spring 也支持 XML 方式定义 Bean:

<bean id="myBean" class="com.example.MyBean"/>

(2)使用

然后在 Java 代码中获取 Bean:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = context.getBean(MyBean.class);

三、生命周期

1、概述
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.stereotype.Component;@Component
public class MyBean implements InitializingBean, DisposableBean {public MyBean() {System.out.println("1️⃣ Bean 实例化(Constructor 调用)");}// 依赖注入后执行@PostConstructpublic void postConstruct() {System.out.println("2️⃣ @PostConstruct 方法执行");}// 实现 InitializingBean 接口@Overridepublic void afterPropertiesSet() {System.out.println("3️⃣ afterPropertiesSet() 方法执行(InitializingBean)");}// Bean 可用阶段(业务方法)public void doSomething() {System.out.println("🚀 Bean 正在使用...");}// 销毁之前执行@PreDestroypublic void preDestroy() {System.out.println("4️⃣ @PreDestroy 方法执行");}// 实现 DisposableBean 接口@Overridepublic void destroy() {System.out.println("5️⃣ destroy() 方法执行(DisposableBean)");}
}
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;@SpringBootApplication
public class BeanLifecycleApplication {public static void main(String[] args) {ApplicationContext context = SpringApplication.run(BeanLifecycleApplication.class, args);// 获取 Bean 并调用方法MyBean myBean = context.getBean(MyBean.class);myBean.doSomething();// 关闭 Spring 容器(触发 Bean 销毁)((SpringApplication) context).close();}
}

一句话总结:Spring 负责 Bean 生命周期,开发者可以在关键阶段自定义行为! 

(1)实例化(Instantiation)

 Spring 通过 new 反射创建 Bean 实例。

(2)属性填充(Populate Properties)

Spring 依赖注入,设置 Bean 的 @Autowired 或 XML 配置的属性;

(3)BeanPostProcessor#postProcessBeforeInitialization();
(4)初始化(Initialization)
  • 调用 InitializingBean#afterPropertiesSet()(如果实现了 InitializingBean

  • 调用 @PostConstruct 标注的方法(如果有)

(5)BeanPostProcessor#postProcessAfterInitialization()
(6)Bean 可用(In Use)
(7)销毁(Destruction)
  • 调用 @PreDestroy 标注的方法(如果有)

  • 调用 DisposableBean#destroy()(如果实现了 DisposableBean

  • XML 配置或 @Bean(destroyMethod="xxx") 自定义销毁方法

看下具体流程

1、创建前准备阶段

在这个阶段,Spring上下文和相关配置被解析,查找与Bean相关的配置内容,如`init-method`和`destory-method`,以及BeanFactoryPostProcessor等前置和后置处理。这些配置允许开发者在Bean加载过程中实现扩展机制。

2、实例化Bean

对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。

对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。

通过反射机制,Spring创建Bean的实例对象。在这个阶段,Spring会扫描和解析Bean声明的属性。

3、依赖注入阶段

实例化后的对象被封装在BeanWrapper对象中,紧接着,Spring根据BeanDefinition中的信息 以及 通过BeanWrapper提供的设置属性的接口完成属性设置与依赖注入。

4、其他处理

4.1、处理Aware接口

Spring会检测该对象是否实现了xxxAware接口,通过Aware类型的接口,可以让我们拿到Spring容器的一些资源:

①如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,传入Bean的名字;
②如果这个Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。
②如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,传递的是Spring工厂自身。
③如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文;

4.2、BeanPostProcessor前置处理:

如果想对Bean进行一些自定义的前置处理,那么可以让Bean实现了BeanPostProcessor接口,那将会调用postProcessBeforeInitialization(Object obj, String s)方法。

4.3、InitializingBean:

如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法。

4.4、init-method:

如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。

4.5、BeanPostProcessor后置处理:

如果这个Bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法;由于这个方法是在Bean初始化结束时调用的,所以可以被应用于内存或缓存技术;

以上几个步骤完成后,Bean就已经被正确创建了,之后就可以使用这个Bean了。

5、DisposableBean:

当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法; 

6、destroy-method:

最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

以上生命周期包含两个重要的事件:初始化和销毁事件。初始化事件发生在Bean的属性赋值之后,在`init-method`操作之前,而销毁事件则发生在Bean在容器关闭时,内存释放之前。

2、生命周期回调方式

Spring 提供多种方式来定制 Bean 生命周期的行为:

(1)使用 @PostConstruct@PreDestroy(推荐)

推荐使用 @PostConstruct@PreDestroy,因为它们是标准 Java 注解,和 Spring 解耦。

  • @PostConstruct:Bean 初始化完成后执行

  • @PreDestroy:Bean 销毁前执行

@Component
public class MyBean {@PostConstructpublic void init() {System.out.println("Bean 初始化完成");}@PreDestroypublic void cleanup() {System.out.println("Bean 即将被销毁");}
}
(2)实现 InitializingBeanDisposableBean

Spring 提供了 InitializingBeanDisposableBean 两个接口,不推荐使用,因为这样会耦合 Spring 框架,影响代码的可移植性。

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.DisposableBean;@Component
public class MyBean implements InitializingBean, DisposableBean {@Overridepublic void afterPropertiesSet() {System.out.println("Bean 初始化 afterPropertiesSet()");}@Overridepublic void destroy() {System.out.println("Bean 销毁 destroy()");}
}
(3)使用 @Bean(initMethod, destroyMethod)

如果是通过 @Configuration 手动注册 Bean,可以使用 @BeaninitMethoddestroyMethod

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyConfig {@Bean(initMethod = "init", destroyMethod = "cleanup")public MyBean myBean() {return new MyBean();}
}class MyBean {public void init() {System.out.println("Bean 初始化(initMethod)");}public void cleanup() {System.out.println("Bean 销毁(destroyMethod)");}
}
(4)使用 BeanPostProcessor(高级用法)

如果需要在 Bean 初始化前后进行操作,可以使用 BeanPostProcessor,适用于 AOP、代理、动态增强等高级需求。

import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;@Component
public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) {System.out.println("🚀 BeanPostProcessor - 初始化前:" + beanName);return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) {System.out.println("✅ BeanPostProcessor - 初始化后:" + beanName);return bean;}
}
3、什么时候会触发 Bean 的销毁
  • 单例(Singleton)Bean:Spring 容器关闭时销毁

  • 多例(Prototype)Bean:Spring 不会 自动管理销毁,需要手动处理

  • Web 应用

    • request 作用域:HTTP 请求结束时销毁

    • session 作用域:Session 结束时销毁

    • application 作用域:Web 应用关闭时销毁

相关文章:

SpringBean模块(一)定义如何创建生命周期

一、介绍 1、简介 在 Spring 框架中&#xff0c;Bean 是指由 Spring 容器 管理的 Java 对象。Spring 负责创建、配置和管理这些对象&#xff0c;并在应用程序运行时对它们进行依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;。 通俗地讲&#xff0c;Sp…...

2007-2019年各省地方财政一般公共服务支出数据

2007-2019年各省地方财政一般公共服务支出数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、地方财政一般公共服务支出 4、范围&#xff1a;31省 5、指标说明&#xff1a;地方财政一般公共服务…...

S32K144外设实验(六):FTM输出单路PWM

文章目录 1. 概述1.1 时钟系统1.2 实验目的2. 代码的配置2.1 时钟配置2.2 FTM模块配置2.3 输出引脚配置2.4 API函数调用1. 概述 1.1 时钟系统 FTM的CPU接口时钟为SYS_CLK,在RUN模式下最高80MHz。模块的时钟结构如下图所示。 从上图中可以看出,FTM模块的功能时钟为SYS_CLK,…...

二层综合实验

拓扑图 实验要求 1.内网IP地址使用172.16.6.0/16分配 2.sw1和sW2之间互为备份 3.VRRP/STP/VLAN/Eth-trunk均使用 4.所有Pc均通过DHCP获取IP地址 5.ISP只能配置IP地址 6.所有电脑可以正常访问IsP路由器环回 实验思路 这是一个二层综合实验每当拿到一个实验看清楚要求之后都有…...

《深度剖析SQL之WHERE子句:数据过滤的艺术》

在当今数据驱动的时代&#xff0c;数据处理和分析能力已成为职场中至关重要的技能。SQL作为一种强大的结构化查询语言&#xff0c;在数据管理和分析领域占据着核心地位。而WHERE子句&#xff0c;作为SQL中用于数据过滤的关键组件&#xff0c;就像是一把精准的手术刀&#xff0c…...

Python每日一题(7)

Python每日一题 2025.3.27 一、题目二、分析三、自己源代码四、deepseek答案五、源代码与ai分析 一、题目 question["""编写程序,生成包含20个随机数的列表,然后将前十个元素升序排列,后10个元素降序排列,并输出结果""" ]二、分析 今天本来写了…...

Linux命令大全:从入门到高效运维

适合人群&#xff1a;Linux新手 | 运维工程师 | 开发者 目录 一、Linux常用命令&#xff08;每天必用&#xff09; 1. 文件与目录操作 2. 文件内容查看与编辑 二、次常用命令&#xff08;按需使用&#xff09; 1. 系统管理与监控 2. 网络与通信 3. 权限与用户管理 三、…...

Xss复现

目录 前提&#xff1a; 1.什么是XSS 2.XSS 的三种主要类型 复现 第1关 第2关 前提&#xff1a; 1.什么是XSS XSS&#xff08;跨站脚本攻击&#xff0c;Cross-Site Scripting&#xff09; 是一种常见的 Web 安全漏洞&#xff0c;攻击者通过向网页注入恶意脚本&#xff…...

3.28学习总结

完成分割回文串的算法题&#xff0c;难点主要在如何去分割&#xff0c;靠什么去分割字符串 int a(char arr[]){int i,j;int lenstrlen(arr);for(i0,jlen-1;i<j;i,j--){if(arr[i]!arr[j]) return 0;}return 1;}char **path;int pathtop;char***reasult;int*ansize;int count…...

【MySQL基础】数据库及表基本操作

作为运维工程师&#xff0c;掌握MySQL的基础操作是日常工作的重要技能之一。本文将介绍MySQL中数据库和表的基本操作&#xff0c;帮助您快速上手或复习这些核心概念。 1 数据库基本操作 1.1 创建数据库 create database db_name; -- 指定字符集和排序规则 create database d…...

注意!ChatGPT 全新 AI 图像功能延迟对免费用户开放

2025 年 3 月 25 日&#xff0c;OpenAI 正式宣布在 ChatGPT 中推出基于 GPT-4o 模型的全新原生图像生成功能。 这一功能允许用户通过对话生成和编辑图像&#xff0c;支持从写实风格到插图风格的多种形式。OpenAI 首席执行官萨姆・奥特曼&#xff08;Sam Altman&#xff09;在社…...

玛哈特液压式精密矫平机——以精准压力,定义金属的绝对服从

板材应力不除&#xff0c;良率难升。液压式精密矫平机&#xff0c;凭借多级液压闭环技术AI动态补偿算法&#xff0c;攻克0.2mm超薄钛箔至65mm装甲钢板的矫平极限&#xff0c;平整度精度锁定0.012mm&#xff0c;残余应力≤3MPa&#xff0c;让金属从“形似平整”迈向“分子级稳定…...

HCIA【NAT】

目录 1 NAT产生背景 2 NAT作用 3 NAT分类 NAT&#xff08;网络地址转换技术&#xff09; 1 NAT技术产生背景 [1] IPV4地址不够用 [2] 处于IPV4到IPV6的一个过渡阶段&#xff0c;IPV6地址还没有完全普及 2 作用 [1] 解决IP地址不够用的问题 [2] 做公网和私网地址的转换 …...

Reactor 事件流 vs. Spring 事件 (ApplicationEvent)

Reactor 事件流 vs. Spring 事件 ApplicationEvent Reactor 事件流 vs. Spring 事件 (ApplicationEvent)1️⃣ 核心区别2️⃣ Spring 事件 (ApplicationEvent)✅ 示例&#xff1a;Spring 事件发布 & 监听1️⃣ 定义事件2️⃣ 发布事件3️⃣ 监听事件&#x1f539; 进阶&…...

Google开源机器学习框架TensorFlow探索更多ViT优化

一、在边缘设备优化ViTa 在边缘设备上优化 ViT&#xff08;Vision Transformer&#xff09;模型&#xff0c;主要目标是减少计算量、降低功耗、提升推理速度。以下是几种关键优化策略&#xff1a; 1.轻量级 ViT 变体 部分 ViT 变体专为边缘设备优化&#xff0c;包括&#xf…...

docker - compose up - d`命令解释,重复运行会覆盖原有容器吗

docker - compose up - d`命令解释,重复运行会覆盖原有容器吗 docker - compose up - d 是一个用于管理 Docker 容器的命令,具体含义如下: 命令含义: up:用于创建、启动并运行容器,会根据 docker - compose.yml 文件中定义的服务配置来操作。-d:表示以“分离模式”(det…...

火山dts迁移工具使用

登录后选择生态工具。&#xff08;数据库传输服务DTS) 先选region 创建迁移任务 假设&#xff0c;mysql 选择专有网络(一般上云到火山都是专有网络&#xff09; 【先选】结构迁移&#xff0c;全量&#xff0c;这些 【再选】迁移对象 &#xff08;他们产研有bug&#xff0c;先…...

Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)

1. brew安装 mac需要先安装brew&#xff0c;如果本地已经安装过brew这一步可以忽略&#xff0c;遇到问题可以自己ai问 /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 可能遇到source .zprofile失败&#xff0c;因为…...

Go 语言标准库中time模块详细功能介绍与示例

以下是 Go 语言 time 模块的详细说明及示例&#xff0c;涵盖时间操作、定时器、时区处理等核心功能&#xff1a; 一、时间基础操作 1. 获取时间 // 当前本地时间 now : time.Now() fmt.Println(now) // 2023-08-04 15:30:45.123456 0800 CST// 构造指定时间 t : time.Date(20…...

做的一些实验

先在DRMPlane::Perform函数里&#xff0c;把PLANE_SET_SRC_RECT或者PLANE_SET_DST_RECT设置的DRMProperty::SRC_W DRMProperty::SRC_H或者DRMProperty::CRTC_W DRMProperty::CRTC_H设置为原来1/2&#xff0c;都无法启动Android界面。 后来思考了一下&#xff0c;Log里好像打印…...

计算机网络基础:网络流量工程与优化策略

计算机网络基础:网络流量工程与优化策略 一、前言二、网络流量工程基础2.1 网络流量工程的定义与目标2.2 网络流量的测量与分析2.2.1 常用的流量测量方法2.2.2 流量数据分析三、网络流量工程的优化策略3.1 链路负载均衡策略3.1.1 基于目的地址的负载均衡3.1.2 基于流量权重的负…...

Python入门学习笔记 - 从环境搭建到基础语法

一、前期准备工作 1. 系统环境配置 防火墙设置与网络连接检查 2. 网络查看 二、计算机基础知识 1. 硬件系统 2. 计算机系统组成 三、Python简介 1. Python的特点 2. Python安装注意事项 四、Python基础语法 1. 注释的分类 2. IDE使用技巧 字体大小随滚轮滑动设置 3.…...

重温:时间窗口与滑动步长的概念

核心概念 窗口大小&#xff08;Window Size&#xff09; 定义窗口包含的时间步数&#xff08;如过去7天、24小时等&#xff09;。例如&#xff0c;窗口大小为5时&#xff0c;每个窗口包含连续的5个时间点数据。 滑动步长&#xff08;Step/Stride&#xff09; 窗口每次向前移动…...

数据库——MySQL字符、日期函数

一、字符函数详解 1. CONCAT() - 字符串拼接 作用&#xff1a;连接多个字符串&#xff0c;类似Java中的号。 语法&#xff1a; CONCAT(string1, string2, ...) 示例&#xff1a; SELECT CONCAT(Hello, , World) AS greeting; -- 输出&#xff1a;Hello World 2. UPPER()…...

Vue3.5 企业级管理系统实战(十一):全屏切换组件

本篇主要探讨如何在导航栏&#xff08;Navbar&#xff09;中添加全屏切换按钮&#xff0c;并借助功能强大的 screenfull 插件&#xff0c;丝滑实现全屏切换功能&#xff0c;为用户打造更为便捷、流畅的交互体验。 1 安装插件 screenfull screenfull 是一个轻量级的 JavaScript…...

HAL_UARTEx_ReceiveToIdle_DMA 开启,但是无法进入空闲中断;

HAL_UART_Receive_IT HAL_UARTEx_ReceiveToIdle_DMA 解决措施&#xff0c;关闭HAL_UART_Receive_IT函数&#xff1b; 因为这个函数会开启start_receive 函数中断&#xff0c;这个函数 将标志位一直置busy&#xff0c;导致一直没有进入空闲中断设置&#xff1b;...

第30周Java分布式入门 分布式基础

分布式基础课程笔记 一、什么是分布式&#xff1f; 1. 权威定义 分布式系统定义为&#xff1a;“利用物理架构形成多个自治的处理元素&#xff0c;不共享主内存&#xff0c;通过发送消息合作”。 2. 核心解释 物理架构与处理元素 &#x1f31f; 多台独立服务器/电脑&#x…...

【商城实战(82)】区块链赋能用户身份验证:从理论到源码实践

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

一周掌握Flutter开发--9. 与原生交互(上)

文章目录 9. 与原生交互核心场景9.1 调用平台功能&#xff1a;MethodChannel9.1.1 Flutter 端实现9.1.2 Android 端实现9.1.3 iOS 端实现9.1.4 使用场景 9.2 使用社区插件9.2.1 常用插件9.2.2 插件的优势 总结 9. 与原生交互 Flutter 提供了强大的跨平台开发能力&#xff0c;但…...

DeepSeek-V3-0324对比OpenAI GPT-4o和Gemini 2.5 Pro

以下是DeepSeek-V3-0324、OpenAI GPT-4o与谷歌Gemini 2.5 Pro模型的更新点及优化对比总结&#xff1a; 1. DeepSeek-V3-0324 开源地址&#xff1a;https://huggingface.co/deepseek-ai/DeepSeek-V3-0324 核心更新与优化 性能提升&#xff1a; 采用6850亿参数MoE架构&#xff…...

【AI论文】LEGO拼图:大型语言模型在多步骤空间推理方面的表现如何?

摘要&#xff1a;多步骤空间推理涉及跨多个顺序步骤理解和推理空间关系&#xff0c;这对于解决复杂的现实世界应用至关重要&#xff0c;如机器人操作、自主导航和自动化装配。为了评估当前多模态大型语言模型&#xff08;MLLMs&#xff09;在获取这一基本能力方面的表现&#x…...

【深度学习】【目标检测】【OnnxRuntime】【C++】YOLOV5模型部署

【深度学习】【目标检测】【OnnxRuntime】【C】YOLOV5模型部署 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【目标检测】【OnnxRuntime】【C】YOLOV5模型部署前言Windows平台搭建依赖环境模型转换--pytorch转onnxONNXRuntime推…...

vcpkg安装指定版本的库

一.vcpkg安装 使用git将vcpkg源码克隆到本地制定目录&#xff08;D:\vcpkg&#xff09;&#xff0c;并初始化 git clone https://github.com/microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh # Linux/macOS .\bootstrap-vcpkg.bat # Windows 如下图&#xff1a; 二.安…...

springboot 四层架构之间的关系整理笔记五

问题&#xff1a;service 和 多个serviceimpl 分层之间的逻辑关系&#xff1f; 好的&#xff01;用班级活动的例子继续讲&#xff0c;假设班长&#xff08;Service接口&#xff09;要管理多种任务&#xff0c;而不同的班委&#xff08;ServiceImpl实现类&#xff09;负责不同场…...

记录一次交易耗时有毛刺TDSQL数据库排查过程

信息同步非常重要&#xff0c;解决问题前&#xff0c;务必从应用获取实例信息、sql关键字、问题时间段、问题描述。 处理步骤&#xff1a; 1、登陆赤兔&#xff0c;打开实例监控信息&#xff0c;检查CPU、内存、IO、缓冲命中率、proxy汇总请求量耗时情况&#xff0c;初步判断…...

爱普生晶体单元FC2012AN在5G RedCap中的应用

在 5G 技术向物联网领域深度渗透的今天&#xff0c;RedCap&#xff08;5G 轻量化&#xff09;作为衔接中高速物联网场景的关键技术&#xff0c;正加速推动工业、医疗、可穿戴等领域的智能化升级。爱普生 FC2012AN 低 ESR 晶体单元凭借其突破性的小尺寸、低功耗与高稳定性设计&a…...

Linux: 网络,arp的数量为什么会对交换机/路由器有性能的影响

这个问题也是非常普遍的问题。比如最近比较火的一个OVS相关的问题: ARP request packets put high pressure on the pinctrl thread in ovn-controller 另一个在工作种也遇到了相似的问题,当一个网络里发了同时发了小一百个GARP之后,路由器的gateway就会有ARP处理延迟。 A…...

javaWeb vue的简单语法

一、简介 两大核心优势&#xff1a; 声明式渲染&#xff1a;Vue 基于标准 HTML 拓展了一套模板语法&#xff0c;使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。 响应性&#xff1a;Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 D…...

Android 中隐藏标题栏和状态栏的方法

在Android开发中&#xff0c;隐藏标题栏和状态栏是实现全屏显示的常见需求。 一、隐藏标题栏 1、通过代码隐藏 对于继承自 AppCompatActivity 的 Activty&#xff0c;可在 onCreate() 方法中调用supportRequestWindowFeature 或 getSupportActionBar 方法来隐藏标题栏。 ove…...

Tof 深度相机原理

深度相机(TOF)的工作原理_tof相机原理-CSDN博客 深度剖析 ToF 技术&#xff1a;原理、优劣、数据纠错与工业应用全解析_tof技术-CSDN博客 飞行时间技术TOF_tof计算公式-CSDN博客 深度相机&#xff08;二&#xff09;——飞行时间&#xff08;TOF&#xff09;_飞行时间技术-C…...

boost.asio

as&#xff08;async&#xff09;:异步 同步io&#xff1a; reactor (非阻塞)&#xff08;需要注册一次&#xff0c;在等待消息时可以干别的事&#xff09; 阻塞io网络模型 接口&#xff1a;read\accept\connect\write 接口返回时&#xff0c;io完成 异步…...

Python 装饰器(Decorators)

什么是装饰器&#xff1f; 装饰器&#xff08;Decorator&#xff09;本质上是一个 修改其他函数功能的函数。它的核心思想是&#xff1a;不修改原函数代码&#xff0c;动态添加新功能。比如&#xff1a; 记录函数执行时间 检查用户权限 缓存计算结果 自动重试失败操作 理解…...

django orm的优缺点

Django ORM&#xff08;对象关系映射&#xff09;是 Django 框架的核心组件之一&#xff0c;它通过将数据库表映射为 Python 类&#xff0c;简化了数据库操作。以下是其优缺点总结&#xff1a; 优点 开发效率高 用 Python 类定义数据模型&#xff0c;无需手写 SQL&#xff0c…...

国产RISC-V车规芯片当前现状分析——从市场与技术角度出发

摘要 随着汽车产业的智能化、电动化转型加速&#xff0c;车规级芯片的战略地位日益凸显。RISC-V指令集凭借其开源、灵活、低功耗等优势&#xff0c;成为国产车规芯片的重要发展方向。本文从市场与技术两个维度出发&#xff0c;深入分析国产RISC-V车规芯片的现状。通过梳理国内…...

不落因果与不昧因果

在佛教浩瀚的哲学体系中&#xff0c;“因果”是贯穿修行始终的核心命题。而“不落因果”与“不昧因果”这对看似矛盾的概念&#xff0c;恰似明镜的两面&#xff0c;映照出修行者对因果法则的不同认知层次。二者虽仅一字之差&#xff0c;却如天堑般分隔了迷悟两岸&#xff0c;其…...

《论语别裁》第02章 为政(08) 诗的伟大

孔子说我整理诗三百篇的宗旨在什么地方&#xff1f;“一言以蔽之”——一句话&#xff0c;“思无邪”。人不能没有思想&#xff0c;只要是思想不走歪曲的路&#xff0c;引导走上正路就好&#xff0c;譬如男女之爱。如果作学问的人&#xff0c;男女之爱都不能要&#xff0c;世界…...

在学校图书馆知识库中进行论文检索报告生成

首先登录信息门户—>科研服务—>机构知识库 在成果认领页面&#xff0c;查看自己的成果情况。如果发现自己的有些成果未被录入&#xff0c;可以发邮件给管理员。 最后&#xff0c;进入成果管理&#xff0c;选择需要的成果进行检索报告的生成...

《寒门枭雄传》章回体拟目与故事设计

《寒门枭雄传》章回体拟目与故事设计 主题&#xff1a;寒门逆袭的制度性困境与个人成长的撕裂性代价 第一回 贩履郎寒冬逢逼债 落魄汉雪夜定从戎 地点&#xff1a;京口草鞋摊→北府军营 人物&#xff1a;刘裕、刁逵&#xff08;士族豪强&#xff09;、刘母 故事&#xff1a; …...

头歌 | Linux之用户高级管理

若未实现预期结果, 可私信我帮你解答 2025-3-28 第1关&#xff1a;创建/删除用户组 > /data/workspace/myshixun/case1/evaluating.sh # 写入新内容 echo "echo 创建newGroup用户组成功 创建newGroupID用户组成功 设置newGroupID用户组ID成功 删除oldGroup用户组成功…...

常用的测试用例

登录、添加、删除、查询模块是我们经常遇到的&#xff0c;这些模块的测试点该如何考虑 1)登录 ① 用户名和密码都符合要求(格式上的要求) ② 用户名和密码都不符合要求(格式上的要求) ③ 用户名符合要求&#xff0c;密码不符合要求(格式上的要求) ④ 密码符合要求&#xf…...