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):控制反转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 就是直接选取本地的代码,覆盖掉远程仓库的 Accept Theirs 是直接选取远程仓库的,覆盖掉自己本地的 我们选择Merge,自己手动行进选择、修改。 这里左边部分是你本地仓库的代码,右边部分是远程仓库的代码,中间的res…...
Vision Transformer (ViT)
生成式模型与判别式模型 生成式模型,又称概率模型,是指通过学习数据的分布来建立模型P(y|x),然后利用该模型来生成新的数据。生成式模型的典型代表是朴素贝叶斯模型,该模型通过学习数据的分布来建立概率模型,然后利用该模型来生成新的数据。判别式模型,又称非概率模型,…...
OpenGL Metal Shader 编程:解决图片拉伸变形问题
前面发了一些关于 Shader 编程的文章,有读者反馈太碎片化了,希望这里能整理出来一个系列,方便系统的学习一下 Shader 编程。 由于主流的 Shader 编程网站,如 ShaderToy, gl-transitions 都是基于 GLSL 开发 Shader ,加…...
[SQL挖掘机] - 字符串函数 - concat
介绍: concat函数用于连接字符串的函数。它接受多个字符串作为参数,并将它们按顺序连接起来形成一个新的字符串。 用法: 以下是concat函数的语法: concat(string1, string2, ...)其中,string1, string2, …是要连接的字符串参数。你可以传…...
Rust之所有权
1、所有权的概念: 程序需要管理自己在运行时使用的计算机内部空间。Rust语言采用包含特定规则的所有权系统来管理内存,这套规则允许编译器在编译的过程中执行检查工作,而不会产生任何的运行时开销。 (1)、所有权规则: 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 移动硬盘未正常退出,再次链接无法读取(显示)
(1)首先插入自己的硬盘,然后找到mac的磁盘工具 (2)打开磁盘工具,发现自己的磁盘分区在卸载状态;点击无法成功装载。 (3)打开终端,输入 diskutil list查看自…...
短视频账号矩阵系统源码开发部署路径
一、短视频批量剪辑的开发逻辑算法 1.视频剪辑之开发算法 自己研发视频剪辑是指通过对视频素材进行剪切、调整、合并等操作,利用后台计算机算法,进行抽帧抽组抽序进行排列以达到对视频内容进行修改和优化的目的。自己研发的视频剪辑工具可以通过后台码…...
前端 | ( 十一)CSS3简介及基本语法(上) | 尚硅谷前端html+css零基础教程2023最新
学习来源:尚硅谷前端htmlcss零基础教程,2023最新前端开发html5css3视频 系列笔记: 【HTML4】(一)前端简介【HTML4】(二)各种各样的常用标签【HTML4】(三)表单及HTML4收尾…...
Kafka入门到起飞系列 - 副本机制,什么是副本因子呢?
我们一直在讲一个主题会有多个分区,这多个分区可以分布在一台服务器上,也可以分布在多台服务器上,还可以增加分区(Kafka目前只支持分区),这是Kafka提供的一种横向扩展的手段 比如我们创建了一个主题&#x…...
2023年基准Kubernetes报告:6个K8s可靠性失误
云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面,但大多数组织预计今年的云使用和支出将与计划的相同(45%),或高于计划的(45%)…...
程序员面试系列,k8s常见面试题
原文链接 一、什么是 Kubernetes?解释其主要功能和用途。 Kubernetes(通常简称为K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发,并于2014年捐赠给了云原生计算基金会&a…...
docker版jxTMS使用指南:站点的调整
本文讲解4.4版jxTMS中的站点的调整,整个系列的文章请查看:[docker版jxTMS使用指南:docker版jxTMS使用指南:4.4版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请…...
element ui input 深层循环v-model绑定默认数据删除不了的情况
例子: 在项目开发中遇到的,简单记录一下 <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:建立benchmark step2:定义参数init需要的算法 step3:定义目标函数、参数空间、优化函数、验证函数 step4:训练贝叶斯优化器 step5:修…...
多线程练习——抽奖箱
题目: 分析以下需求,并用代码实现: 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,900,2,80,300,700};创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随…...
RK3399平台开发系列讲解(内核调试篇)Valgrind 内存调试与性能分析
🚀返回专栏总目录 文章目录 一、为什么要学会Valgrind二、什么是内存泄露三、Valgrind的移植四、Valgrind相关参数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Valgrind 是一个开源的内存调试和性能分析工具,用于帮助开发者找出程序中的内存错误,如内存泄漏、使…...
Windows 11的最新人工智能应用Windows Copilot面世!
Windows Copilot是Windows 11预览版中的一项AI辅助功能。 Windows 11还包括设置应用程序的更改,更广泛的支持压缩文件格式。 上个月,微软宣布将继续其将ChatGPT应用于所有产品的冒险之旅,推出了名为Copilot的新Windows 11功能。几个月前&…...
Mac 预览(Preview)丢失PDF标注恢复
感谢https://blog.csdn.net/yaoyao_chen/article/details/127462497的推荐! 辛苦用预览在pdf上做的阅读标记,关闭后打开全丢失了,推荐尝试下网站导入文件进行恢复: 直接使用该网页应用PDF Annotation Recovery 或者访问该项目&a…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
