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

别再重装系统了!用GParted给Ubuntu 20.04根目录无损扩容(Win11+Ubuntu双系统适用)

双系统用户必备&#xff1a;Ubuntu根目录无损扩容实战指南 1. 当根目录空间告急时 作为一名长期使用Win11Ubuntu双系统的开发者&#xff0c;我深刻理解那种看着根目录空间一点点被蚕食的焦虑。特别是进行深度学习训练或大型项目编译时&#xff0c;几十GB的空间转眼间就被占满。…...

OpenClaw+千问3.5-9B智能家居:自然语言控制HomeAssistant

OpenClaw千问3.5-9B智能家居&#xff1a;自然语言控制HomeAssistant 1. 为什么需要自然语言控制智能家居&#xff1f; 去年装修新房时&#xff0c;我安装了HomeAssistant系统来控制全屋灯光、空调和窗帘。虽然手机App能实现远程控制&#xff0c;但每次都要打开应用、找到对应…...

阿里云 ECS 部署 SpringBoot 项目完整教程(无坑可直接照着做)

需要购买阿里云服务器、学习服务器搭建的朋友看这里 &#x1f447;阿里云超值折扣购买通道 &#xff1a;https://t.aliyun.com/U/L7DIVq 超详细服务器搭建教程&#xff1a;手把手教你阿里云服务器的购买及环境搭建 无论是新手入门、个人建站还是企业部署&#xff0c;都能一站…...

算法部署设计,Sm3国密算法的硬件ip设计,纯v手写代码,图一为ip接口,图二为资源消耗

算法部署设计&#xff0c;Sm3国密算法的硬件ip设计&#xff0c;纯v手写代码&#xff0c;图一为ip接口&#xff0c;图二为资源消耗&#xff0c;图三四为封装为axilite接口并在开发版下板测试&#xff0c;图五为开发版实测结果 直接联系内容包括:sm3的软件python实现代码&#xf…...

Z-Image Turbo实际作品分享:城市风光生成效果

Z-Image Turbo实际作品分享&#xff1a;城市风光生成效果 本文所有内容均为技术效果展示&#xff0c;不涉及任何政治敏感内容&#xff0c;所有案例均为技术演示用途。 1. 效果概览&#xff1a;城市风光的AI艺术呈现 Z-Image Turbo作为基于Gradio和Diffusers构建的高性能AI绘图…...

如何在Charmbracelet Log中实现结构化日志记录的5个技巧

如何在Charmbracelet Log中实现结构化日志记录的5个技巧 【免费下载链接】log A minimal, colorful Go logging library &#x1fab5; 项目地址: https://gitcode.com/gh_mirrors/log1/log Charmbracelet Log是一款轻量级且色彩丰富的Go日志库&#xff0c;支持结构化日…...

AutoSAR从入门到精通:构建标准化汽车软件架构的完整指南

1. 为什么汽车软件需要AutoSAR&#xff1f; 十年前我刚入行汽车电子时&#xff0c;每个OEM厂商的ECU软件都是独立开发的"黑盒子"。同一款车窗控制功能&#xff0c;在德系、日系、美系车型上要用完全不同的代码实现。更痛苦的是&#xff0c;当需要升级ADAS功能时&…...

ESP8266天气时钟DIY全攻略:从零搭建到个性化定制

1. 硬件准备与成本控制 作为一个玩了多年智能硬件的爱好者&#xff0c;我强烈推荐从ESP8266开始入门物联网项目。这款芯片的价格实在太香了&#xff0c;9块钱就能买到NodeMCU开发板&#xff0c;性能却足够应付大多数DIY场景。我去年做过统计&#xff0c;用ESP8266搭建的天气时钟…...

告别重复造轮子:用快马AI一键生成openclaw项目高效串口调试工具

在机器人开发过程中&#xff0c;串口通信是最基础也最频繁使用的功能之一。无论是传感器数据采集、电机控制指令下发&#xff0c;还是与各种硬件模块的交互&#xff0c;都离不开串口通信的支持。然而每次新项目都要从头实现串口通信功能&#xff0c;不仅浪费时间&#xff0c;还…...

Windows11状态栏图标失效?手把手教你修复注册表关联(附一键脚本)

Windows 11状态栏图标失效的终极修复指南&#xff1a;从原理到实战 Windows 11以其现代化的界面设计吸引了不少用户&#xff0c;但系统自定义过程中难免会遇到各种"小脾气"。最近不少用户反馈&#xff0c;在尝试去除桌面图标小箭头后&#xff0c;状态栏的应用程序图标…...