当前位置: 首页 > 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…...

4.5. 方法的四种类型

文章目录 1、无参数无返回值的方法2、有参数无返回值的方法3、有返回值无参数的方法4、有返回值有参数的方法5、return 在无返回值方法的特殊使用 1、无参数无返回值的方法 // 无参数无返回值的方法(如果方法没有返回值&#xff0c;不能不写&#xff0c;必须写void&#xff0c…...

四旋翼无人机使用教程

文章目录 前言一、检查遥控器电源开关混控拨码开关微调开关飞行模式刹车开关行程开关接收机对码 二、检查飞机检查接线 三、解锁并飞行 前言 PX4固件 QGC地面站 Pixhwak飞控 Mc6c遥控器 开源飞控博大精深&#xff0c;欢迎广大爱好者加博主微信名片&#xff0c;一起学习交流。…...

优化 PHP 数据库查询性能

优化 PHP 数据库查询性能可以从以下几个方面入手&#xff1a; 使用索引&#xff1a;在数据库中创建适当的索引可以大大提高查询性能。索引可以加快数据的查找速度&#xff0c;特别是在大型数据库中。选择合适的数据类型&#xff1a;选择正确的数据类型可以减少存储空间的占用&…...

vue 使用stompjs websocket连接rabbitmq

1. 首先确保rabbitmq服务已开启web-stomp 1.1 登录rabbitmq web控制台 1.2 在overview目录下 下拉找到Ports and contexts 看列表有没有http/web-stomp 1.3 如果没有需要开启 window/centos 进入rabbitmq安装目录的bin目录下执行rabbitmq-plugins enable rabbitmq_web_stomp ra…...

com.android.ide.common.signing.KeytoolException:

签名没问题但是提示Execution failed for task :app:packageDebug. > A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable > com.android.ide.common.signing.KeytoolException: Failed to read ke…...

leetcode 1870. Minimum Speed to Arrive on Time(准时到达的最小速度)

需要找一个speed, 使得dist[i] / speed 加起来的时间 < hour, 而且如果前一个dist[i] / speed求出来的是小数&#xff0c;必须等到下一个整数时间才计算下一个。 speed最大不会超过107. 不存在speed满足条件时返回-1. 思路&#xff1a; 如果前一个dist[i] / speed求出来的…...

本地非文字资源无法加载

目录 方法A.静态/动态绑定路径 方法B.require导入&#xff08;运行时加载&#xff09; 方法C.import导入&#xff08;x&#xff09;&#xff08;编译时加载&#xff09; 方法D.ref直接操作元素赋值&#xff08;x&#xff09; 相关知识 import和requir区别 模板路径&#…...

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看…...

万向节死锁

要理解万向节死锁的产生原因&#xff0c;首先要理解欧拉角变换&#xff0c;欧拉角变换是基于最初始的坐标进行变换而非变换后的坐标进行变换。 欧拉角变换需要空间中的三个角&#xff08;即变换后每个轴的偏移量&#xff09;&#xff0c;另外还有每个轴的变换顺序。值得注意的…...

大数据课程D1——hadoop的初识

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解大数据的概念&#xff1b; ⚪ 了解大数据的部门结构&#xff1b; ⚪ 了解hadoop的定义&#xff1b; ⚪ 了解hadoop的发展史&#xff1b; 一、大数据简介 1. 概述…...