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

Spring核心概念、IoC和DI的认识、Spring中bean的配置及实例化、bean的生命周期

初始Spring

  • 一、Spring核心概念
    • 1.1IoC(Inversion of Contral):控制反转
    • 1.2IoC代码实现
    • 1.2DI代码实现
  • 二、bean的相关操作
    • 2.1bean的配置
      • 2.1.1bean的基础配置
      • 2.1.2bean的别名配置
      • 2.1.3bean的作用范围配置
    • 2.2bean的实例化 - - 构造方法
    • 2.3bean的实例化 - - 实例工厂与FactoryBean
    • 2.4bean的生命周期
  • 总结

一、Spring核心概念

1.1IoC(Inversion of Contral):控制反转

  • 代码书写现状
    • 耦合度偏高
  • 解决方案
    • 使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象

  • IoC(Inversion of Contral):控制反转
    • 对象的创建控制权由程序转移到外部,这种思想称为控制反转
  • Spring技术对IoC思想进行了实现
    • Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的“外部
    • IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
  • DI(Dependency Injection)依赖注入
    • 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

1.2IoC代码实现

  • 1.导入Spring坐标
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.21.RELEASE</version>
</dependency>
  • 2.定义Spring管理类
package com.practice.dao;/*** @Author YJ* @Date 2023/7/25 11:26* Description:*/
public interface BookDao {void save();
}
package com.practice.service;/*** @Author YJ* @Date 2023/7/25 11:28* Description:*/
public interface BookService {void save();
}
package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.dao.impl.BookDaoImpl;
import com.practice.service.BookService;/*** @Author YJ* @Date 2023/7/25 11:28* Description:*/
public class BookServiceImpl implements BookService {private BookDao bookDao = new BookDaoImpl();public void save() {bookDao.save();}
}
  • 3.创建Spring配置文件applicationContext.xml,配置对应类作为Spring管理的bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/><bean id="bookService" class="com.practice.service.impl.BookServiceImpl"/>
</beans>
  • 4.初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bean
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取bean/*BookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();*/BookService bookService = (BookService) act.getBean("bookService");bookService.save();}
}

在这里插入图片描述

1.2DI代码实现

  • 1.删除业务层中使用new的方式创建的dao对象
  • 2.提供对应的setter方法
  • 3.配置service与dao的关系
    • property标签表示配置当前bean的属性
    • name属性表示配置哪一个具体的属性
    • ref属性表示参照哪一个bean
package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.service.BookService;public class BookServiceImpl implements BookService {//删除业务层中使用new的方式创建的dao对象private BookDao bookDao;public void save() {bookDao.save();}//提供对应的set方法public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/><bean id="bookService" class="com.practice.service.impl.BookServiceImpl"><!--配置service与dao的关系--><!--property标签表示配置当前bean的属性--><!--name属性表示配置哪一个具体的属性--><!--ref属性表示参照哪一个bean--><property name="bookDao" ref="bookDao"/></bean>
</beans>

在这里插入图片描述

二、bean的相关操作

2.1bean的配置

2.1.1bean的基础配置

  • 1.功能: 定义Spring核心容器管理的对象
  • 2.格式:
<beans><bean/><bean></bean>
</beans>
  • 3.属性:
    • 3.1id: bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一
    • 3.2class: bean的类型,即配置的bean的全路径类名

2.1.2bean的别名配置

  • 别名配置就是在bean标签中添加一个name属性,这个name属性就是bean的别名,可以有多个别名中间用逗号、空格或分号隔开即可
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/><!--name起别名--><bean id="bookService" name="service" class="com.practice.service.impl.BookServiceImpl"><!--配置service与dao的关系--><!--property标签表示配置当前bean的属性--><!--name属性表示配置哪一个具体的属性--><!--ref属性表示参照哪一个bean--><property name="bookDao" ref="bookDao"/></bean>
</beans>
package com.practice;import com.practice.dao.BookDao;
import com.practice.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author YJ* @Date 2023/7/25 11:33* Description:*/
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取bean/*BookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();*/BookService bookService = (BookService) act.getBean("service");//用到别名servicebookService.save();}
}

在这里插入图片描述

  • 若是bean的名称跟配置的不一致会出现NoSuchBeanDefinitionException异常,表示该bean未定义
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取bean/*BookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();*/BookService bookService = (BookService) act.getBean("service1");//用到错误别名service1bookService.save();}
}

在这里插入图片描述

2.1.3bean的作用范围配置

  • Spring默认配置的bean是一个单列的,即只有一个bean对象,如下所示:
public class AppForScope {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao1 = (BookDao) act.getBean("bookDao");BookDao bookDao2 = (BookDao) act.getBean("bookDao");System.out.println(bookDao1);System.out.println(bookDao2);}
}

在这里插入图片描述


  • 我们可以通过配置bean的文件控制是否产生一个对象还是多个对象
  • 通过scope属性定义bean的作用范围,可选范围如下:
    • singleton:单例(默认)
    • prototype:非单例

在这里插入图片描述


在这里插入图片描述


  • 适合交给容器进行管理的bean
    • 表现层对象
    • 业务层对象
    • 数据层对象
    • 工具对象
  • 不适合交给容器进行管理的bean
    • 封装实体的域对象

2.2bean的实例化 - - 构造方法

  • bean本质上就是对象,创建bean使用构造方法完成
public class BookDaoImpl implements BookDao {private BookDaoImpl() {System.out.println("book dao constructor running...");}public void save() {System.out.println("bookDao save~");}
}
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanBookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl" scope="prototype"/><!--name起别名--><bean id="bookService" name="service" class="com.practice.service.impl.BookServiceImpl" ><!--配置service与dao的关系--><!--property标签表示配置当前bean的属性--><!--name属性表示配置哪一个具体的属性--><!--ref属性表示参照哪一个bean--><property name="bookDao" ref="bookDao"/></bean>
</beans>

在这里插入图片描述

  • 表明bean在创建时调用的无参构造方法
  • 无参构造方法如果不存在,会抛出BeanCreationException异常

2.3bean的实例化 - - 实例工厂与FactoryBean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><!--方式三:使用实例化工厂实例化bean--><bean id="userFactory" class="com.practice.factory.UserDaoFactory"/><bean id="userDao" factory-bean="userFactory" factory-method="getUserDao"/>
</beans>
public interface UserDao {public void save();
}
public class UserDaoImpl implements UserDao {public void save() {System.out.println("UserDao save...");}
}
public class UserDaoFactory {public UserDao getUserDao(){return new UserDaoImpl();}
}
package com.practice;import com.practice.dao.UserDao;
import com.practice.factory.UserDaoFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author YJ* @Date 2023/7/25 19:09* Description:*/
public class AppForInstanceUser {public static void main(String[] args) {/*//创建实例工厂对象UserDaoFactory userDaoFactory = new UserDaoFactory();UserDao userDao = userDaoFactory.getUserDao();userDao.save();*///获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanUserDao userDao = (UserDao) act.getBean("userDao");userDao.save();}
}

在这里插入图片描述

  • 使用FactoryBean实例化bean
package com.practice.factory;import com.practice.dao.UserDao;
import com.practice.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.FactoryBean;/*** @Author YJ* @Date 2023/7/25 19:21* Description:使用FactoryBean实例化bean*/
public class UserDaoFactoryBean implements FactoryBean<UserDao> {public UserDao getObject() throws Exception {//代替原始实例工厂中创建对象的方法return new UserDaoImpl();}public Class<?> getObjectType() {return UserDao.class;}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--方式三:使用实例化工厂实例化bean--><bean id="userFactory" class="com.practice.factory.UserDaoFactory"/><bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/><!--方式四:使用FactoryBean实例化bean--><bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/></beans>

在这里插入图片描述

  • 使用这种方式创建出的bean是单例的
    在这里插入图片描述
  • 可在UserDaoFactoryBean中实现方法isSingleton并返回false即可
public boolean isSingleton() {return false;}

在这里插入图片描述

2.4bean的生命周期

  • 生命周期:从创建到消亡的完整过程
  • bean生命周期:bean从创建到消毁的整体过程
  • bean生命周期控制:在bean创建后到销毁前做一些事情
package com.practice.dao.impl;import com.practice.dao.BookDao;/*** @Author YJ* @Date 2023/7/25 11:24* Description:*/
public class BookDaoImpl1 implements BookDao {public void save() {System.out.println("bookDao save~");}//表示bean初始化public void init() {System.out.println("init...");}//表示bean销毁前对应操作public void destroy() {System.out.println("destroy...");}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--方式三:使用实例化工厂实例化bean--><!--<bean id="userFactory" class="com.practice.factory.UserDaoFactory"/>--><!--<bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/>--><!--方式四:使用FactoryBean实例化bean--><!--<bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/>--><!--配置bean的生命周期--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl1" init-method="init" destroy-method="destroy"/>
</beans>
package com.practice;import com.practice.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author YJ* @Date 2023/7/25 19:40* Description:*/
public class AppForLifeCycle {public static void main(String[] args) {//获取IoC容器ClassPathXmlApplicationContextact = new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanBookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();//关闭容器,才能看到destory方法的执行结果//1.暴力关闭act.close();//2.关闭钩子act.registerShutdownHook();}
}

在这里插入图片描述

package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.dao.impl.BookDaoImpl1;
import com.practice.service.BookService;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;/*** @Author YJ* @Date 2023/7/25 11:28* Description:*/
public class BookServiceImpl1 implements BookService, InitializingBean, DisposableBean {private BookDao bookDao;public void save() {System.out.println("bookService save...");bookDao.save();}public void afterPropertiesSet() throws Exception {System.out.println("service init...");}public void destroy() throws Exception {System.out.println("service destroy...");}public void setBookDao(BookDaoImpl1 bookDao) {this.bookDao=bookDao;}
}
package com.practice;import com.practice.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author YJ* @Date 2023/7/25 19:40* Description:*/
public class AppForLifeCycle {public static void main(String[] args) {//获取IoC容器ClassPathXmlApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanBookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();//act.close();act.registerShutdownHook();}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--方式三:使用实例化工厂实例化bean--><!--<bean id="userFactory" class="com.practice.factory.UserDaoFactory"/>--><!--<bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/>--><!--方式四:使用FactoryBean实例化bean--><!--<bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/>--><!--配置bean的生命周期--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl1" init-method="init" destroy-method="destroy"/><bean id="bookService" class="com.practice.service.impl.BookServiceImpl1"><property name="bookDao" ref="bookDao"/></bean>
</beans>

总结

关于Spring的初步认识我们就学到这里了,关于bean的操作我们有了基本的认识,欢迎各位小伙伴点赞+关注!!!

相关文章:

Spring核心概念、IoC和DI的认识、Spring中bean的配置及实例化、bean的生命周期

初始Spring 一、Spring核心概念1.1IoC(Inversion of Contral)&#xff1a;控制反转1.2IoC代码实现1.2DI代码实现 二、bean的相关操作2.1bean的配置2.1.1bean的基础配置2.1.2bean的别名配置2.1.3bean的作用范围配置 2.2bean的实例化 - - 构造方法2.3bean的实例化 - - 实例工厂与…...

git冲突“accept theirs”和“accept yours”

Accept Yours 就是直接选取本地的代码&#xff0c;覆盖掉远程仓库的 Accept Theirs 是直接选取远程仓库的&#xff0c;覆盖掉自己本地的 我们选择Merge,自己手动行进选择、修改。 这里左边部分是你本地仓库的代码&#xff0c;右边部分是远程仓库的代码&#xff0c;中间的res…...

Vision Transformer (ViT)

生成式模型与判别式模型 生成式模型,又称概率模型,是指通过学习数据的分布来建立模型P(y|x),然后利用该模型来生成新的数据。生成式模型的典型代表是朴素贝叶斯模型,该模型通过学习数据的分布来建立概率模型,然后利用该模型来生成新的数据。判别式模型,又称非概率模型,…...

OpenGL Metal Shader 编程:解决图片拉伸变形问题

前面发了一些关于 Shader 编程的文章&#xff0c;有读者反馈太碎片化了&#xff0c;希望这里能整理出来一个系列&#xff0c;方便系统的学习一下 Shader 编程。 由于主流的 Shader 编程网站&#xff0c;如 ShaderToy, gl-transitions 都是基于 GLSL 开发 Shader &#xff0c;加…...

[SQL挖掘机] - 字符串函数 - concat

介绍: concat函数用于连接字符串的函数。它接受多个字符串作为参数&#xff0c;并将它们按顺序连接起来形成一个新的字符串。 用法: 以下是concat函数的语法&#xff1a; concat(string1, string2, ...)其中&#xff0c;string1, string2, …是要连接的字符串参数。你可以传…...

Rust之所有权

1、所有权的概念&#xff1a; 程序需要管理自己在运行时使用的计算机内部空间。Rust语言采用包含特定规则的所有权系统来管理内存&#xff0c;这套规则允许编译器在编译的过程中执行检查工作&#xff0c;而不会产生任何的运行时开销。 (1)、所有权规则&#xff1a; Rust中的…...

RabbitMQ帮助类的封装

RabbitMQ帮助类的封装 基本部分 public class RabbitMQInvoker {#region Identy private static IConnection _CurrentConnection null;private readonly string _HostName null;private readonly string _UserName null;private readonly string _Password null;#endreg…...

mac 移动硬盘未正常退出,再次链接无法读取(显示)

&#xff08;1&#xff09;首先插入自己的硬盘&#xff0c;然后找到mac的磁盘工具 &#xff08;2&#xff09;打开磁盘工具&#xff0c;发现自己的磁盘分区在卸载状态&#xff1b;点击无法成功装载。 &#xff08;3&#xff09;打开终端&#xff0c;输入 diskutil list查看自…...

短视频账号矩阵系统源码开发部署路径

一、短视频批量剪辑的开发逻辑算法 1.视频剪辑之开发算法 自己研发视频剪辑是指通过对视频素材进行剪切、调整、合并等操作&#xff0c;利用后台计算机算法&#xff0c;进行抽帧抽组抽序进行排列以达到对视频内容进行修改和优化的目的。自己研发的视频剪辑工具可以通过后台码…...

前端 | ( 十一)CSS3简介及基本语法(上) | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 系列笔记&#xff1a; 【HTML4】&#xff08;一&#xff09;前端简介【HTML4】&#xff08;二&#xff09;各种各样的常用标签【HTML4】&#xff08;三&#xff09;表单及HTML4收尾…...

Kafka入门到起飞系列 - 副本机制,什么是副本因子呢?

我们一直在讲一个主题会有多个分区&#xff0c;这多个分区可以分布在一台服务器上&#xff0c;也可以分布在多台服务器上&#xff0c;还可以增加分区&#xff08;Kafka目前只支持分区&#xff09;&#xff0c;这是Kafka提供的一种横向扩展的手段 比如我们创建了一个主题&#x…...

2023年基准Kubernetes报告:6个K8s可靠性失误

云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面&#xff0c;但大多数组织预计今年的云使用和支出将与计划的相同&#xff08;45%&#xff09;&#xff0c;或高于计划的&#xff08;45%&#xff09;…...

程序员面试系列,k8s常见面试题

原文链接 一、什么是 Kubernetes&#xff1f;解释其主要功能和用途。 Kubernetes&#xff08;通常简称为K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发&#xff0c;并于2014年捐赠给了云原生计算基金会&a…...

docker版jxTMS使用指南:站点的调整

本文讲解4.4版jxTMS中的站点的调整&#xff0c;整个系列的文章请查看&#xff1a;[docker版jxTMS使用指南&#xff1a;docker版jxTMS使用指南&#xff1a;4.4版升级内容 docker版本的使用&#xff0c;请查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的说明&#xff0c;请…...

element ui input 深层循环v-model绑定默认数据删除不了的情况

例子&#xff1a; 在项目开发中遇到的&#xff0c;简单记录一下 <el-input style"width: 180px"v-model"item.dataForm"input"handleChangeDataForm($event)"type"number"placeholder"请输入1-2的数值"size"smal…...

GBDT的参数空间与超参数优化

目录 1. 默认参数下的GBDT与其它算法的对比 2. 基于TPE对GBDT进行优化 step1&#xff1a;建立benchmark step2&#xff1a;定义参数init需要的算法 step3&#xff1a;定义目标函数、参数空间、优化函数、验证函数 step4&#xff1a;训练贝叶斯优化器 step5&#xff1a;修…...

多线程练习——抽奖箱

题目&#xff1a; 分析以下需求&#xff0c;并用代码实现&#xff1a; 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,900,2,80,300,700};创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”&#xff0c;“抽奖箱2”&#xff0c;随…...

RK3399平台开发系列讲解(内核调试篇)Valgrind 内存调试与性能分析

🚀返回专栏总目录 文章目录 一、为什么要学会Valgrind二、什么是内存泄露三、Valgrind的移植四、Valgrind相关参数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Valgrind 是一个开源的内存调试和性能分析工具,用于帮助开发者找出程序中的内存错误,如内存泄漏、使…...

Windows 11的最新人工智能应用Windows Copilot面世!

Windows Copilot是Windows 11预览版中的一项AI辅助功能。 Windows 11还包括设置应用程序的更改&#xff0c;更广泛的支持压缩文件格式。 上个月&#xff0c;微软宣布将继续其将ChatGPT应用于所有产品的冒险之旅&#xff0c;推出了名为Copilot的新Windows 11功能。几个月前&…...

Mac 预览(Preview)丢失PDF标注恢复

感谢https://blog.csdn.net/yaoyao_chen/article/details/127462497的推荐&#xff01; 辛苦用预览在pdf上做的阅读标记&#xff0c;关闭后打开全丢失了&#xff0c;推荐尝试下网站导入文件进行恢复&#xff1a; 直接使用该网页应用PDF Annotation Recovery 或者访问该项目&a…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱&#xff1f;分层思维来救场&#xff01; 作者按&#xff1a; 你是不是也遇到过 BLE 多连接时&#xff0c;调试现场像网吧“掉线风暴”&#xff1f; 温度传感器连上了&#xff0c;心率带丢了&#xff1b;一边 OTA 更新&#xff0c;一边通知卡壳。…...

P10909 [蓝桥杯 2024 国 B] 立定跳远

# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上&#xff0c;小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时&#xff0…...

Shell 解释器​​ bash 和 dash 区别

bash 和 dash 都是 Unix/Linux 系统中的 ​​Shell 解释器​​&#xff0c;但它们在功能、语法和性能上有显著区别。以下是它们的详细对比&#xff1a; ​​1. 基本区别​​ ​​特性​​​​bash (Bourne-Again SHell)​​​​dash (Debian Almquist SHell)​​​​来源​​G…...