Spring IoC 详解
在 Spring IoC& DI 详解 中对 IoC已经有了介绍,下面对 IoC 进行详细介绍。
IoC,即控制反转,在之前我们编写程序的时候,我们都是自己 new 出来一个对象,然后自己去管理这个对象,但是这有时候有些麻烦,那么我们可以将这些对象交给 Spring 进行管理,就相当于将对象的控制权交给 Spring,即控制反转。那么,我们应该如何将对象交给 Spring 管理呢?
Spring 的一大特点就是使用注解,在这里也是一样,使用类注解或者方法注解将对象交给 Spring 去管理。下面来一一介绍这些注解。
一、类注解
分为 @Controller,@Service,@Repository,@Component,@Configuration。
既然是类注解,就是指定在类上面的。
相同点:
这几个注解在使用方面没有太大区别,现使用 @Component 来进行讲解。
现有一个 StudentComponent 类,如下:
@Component
public class StudentComponent {public void method() {System.out.println("component");}
}
现在我们想要拿到这个类的一个对象,就需要使用如下方法:
@SpringBootApplication
public class SpringBootDemo2025416Application {public static void main(String[] args) {//获取 Spring 上下文对象ApplicationContext context = SpringApplication.run(SpringBootDemo2025416Application.class, args);//根据类型获取StudentComponent student1 = context.getBean(StudentComponent.class);student1.method();//根据名称获取,需要进行类型转换StudentComponent student2 = (StudentComponent) context.getBean("studentComponent");student2.method();//根据类型和名曾获取StudentComponent student3 = context.getBean("studentComponent", StudentComponent.class);student1.method();}}
这个类是 Spring 的启动类,我们在 conten 中获取我们交给 Spring 进行管理的对象。
代码运行结果如下:
通过上面的例子,我们可以知道,从 Spring 中获取对象的方式有三种,即:根据类型获取、根据对象名称获取、根据类型和对象名称获取。
在这里我们需要注意,我们并没有给这个对象指定名称,但为什么还能通过名称获取到这个对象呢?
在 Spring 中,会根据类名分配一个默认的对象名,规则如下:
1)类的首字母是大写的,其后的字母是小写的,如 StudentComponent,那么默认的对象名就是 studentComponent;
2)类的前两个首字母都是大写的,如 ABComponent,那么默认的对象名就是类名本身;
针对上面获取对象的方法,如果有多个对象,那么 Spring 就无法区分需要获取的是哪个对象,那么就会报错,这是我们就需要指定对象名称,这在后面的 @Bean 注解会进行讲解。
这里我们需要思考一下,上面的三个对象是同一个对象吗,还是不同的对象?我们可以将这三个对象的地址打印出来,结果如下:
从上图可以看出,这三个对象是同一个对象。
如果我们去掉 @Component 注解,会发生什么呢?
代码运行结果如下:
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.gjm.demo.component.StudentComponent' availableat org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343)at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334)at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1261)at com.gjm.demo.SpringBootDemo2025416Application.main(SpringBootDemo2025416Application.java:17)
这是错误信息,异常为 NoSuchBeanDefinitionException,即在容器中找不到 StudentComponent 对象。这是因为由于我们要从容器中去获取一个对象,这就需要容器中必须得先存在这个对象才能去获取,加了 @Component 注解就相当于将这个对象放到了容器中,这个我们才能在容器中获取到这个对象。
不同点:
在上面我们说了这五个注解的相同用法,接下来开始介绍这五个注解的不同点。
@Controller 用于控制层;
@Service 用于业务逻辑层;
@Repository 用于数据层;
@Configuration 用于配置层;
@Component 用于组件层。
在实际应用中,这五个注解的边界并不是很清晰,虽然可以混用,但不同的注解表示这个类的不同的涵义,最好按照规定使用注解。
但是 @Controller 不能与其他注解提婚,这个注解是进行前后端交互用的,其他的注解都没有这个功能。
接下来我们看一下这五个注解的源码:
@Controller
@Service
@Repository
@Configuration
@Component
通过查看源码可以知道,@Controller, @Service,@Repository,@Configuration这四个注解中均含有 @Component 注解,即这四个注解均是 @Component 的衍生注解。
二、方法注解
通过上面的介绍我们可以看出,无论我们怎么获取对象,这些对象均是同一个对象,但如果我们有多个对象呢,上面的注解就不管用了。下面介绍一个方法注解 @Bean。
既然是方法注解,那么就是指定在方法上的。
接下来来看一段代码:
public class StudentComponent {@Beanpublic Student s1() {return new Student("zhangsan", 12);}@Beanpublic Student s2() {return new Student("lisi", 14);}
}@SpringBootApplication
public class SpringBootDemo2025416Application {public static void main(String[] args) {//获取 Spring 上下文对象ApplicationContext context = SpringApplication.run(SpringBootDemo2025416Application.class, args);Student student1 = (Student)context.getBean("s1");System.out.println(student1);Student student2 = (Student)context.getBean("s2");System.out.println(student2);}}
当我们运行这段代码后,发现报错了,错误代码如下:
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 's1' availableat org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:895)at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1362)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1243)at com.gjm.demo.SpringBootDemo2025416Application.main(SpringBootDemo2025416Application.java:18)
里面说没有发现与一个名为 s1 的对象,那为什么我们加了 @Bean 注解,却说没有这个对象呢?
因为 @Bean 需要搭配类注解来使用,即在 StudentComponent 上面还需要加上一个类注解,上述的五大注解均可以使用,这里我么选择 @Component。
改动过的代码如下:
@Component
public class StudentComponent {@Beanpublic Student s1() {return new Student("zhangsan", 12);}@Beanpublic Student s2() {return new Student("lisi", 14);}
}@SpringBootApplication
public class SpringBootDemo2025416Application {public static void main(String[] args) {//获取 Spring 上下文对象ApplicationContext context = SpringApplication.run(SpringBootDemo2025416Application.class, args);Student student1 = (Student)context.getBean("s1");System.out.println(student1);Student student2 = (Student)context.getBean("s2");System.out.println(student2);}}
接下来就可以获取到 s1 与 s2 这两个对象了,下面是代码的运行结果:
下面来看一下 @Bean 的源码:
我们可以知道,这里面有两个属性,value 和 name,这两个属性表示的含义均为对象的名称,即我们可以自定义对象的名称,这个名称可以是一个字符串,也可以是一个字符串数组,代码如下:
@Bean({"s3", "s4"})@Bean("s3")public Student s1() {return new Student("zhangsan", 12);}
这里写了两个 @Bean,在实际情况下只能只用一个。现针对 @Bean("s3") 进行讲解。
当我们将对象名称改了之后,若我们还是按照原来默认的名字去获取,代码的运行结果如下:
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 's1' availableat org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:895)at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1362)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1243)at com.gjm.demo.SpringBootDemo2025416Application.main(SpringBootDemo2025416Application.java:18)
代码运行错误,错误信息里说没有找到一个对象名称叫做 s1 的,因为当我们将对象名改名后,原本的对象名就无法使用,必须使用改动之后的名称,下面使用 s3 来获取对象,代码运行结果如下:
结果运行成功。
但是在 s1 中,我们对 student 的属性是直接赋值的,当然,也可以通过传递参数来赋值,代码如下:
@Component
public class StudentComponent {// @Bean({"s3", "s4"})@Bean("s3")public Student s1(String name) {return new Student(name, 12);}@Beanpublic Student s2() {return new Student("lisi", 14);}
}
但是,我们在 getBean 方法中,并没有找到一个方法可以给对象传递参数,那么应该怎么给 name 赋值呢?
在这种情况下,当我们将对象交给 Spring 进行管理,那么 Spring 就会在 Spring 容器中查找 String 类型的对象,并将对象赋给 name,代码如下:
@Component
public class StudentComponent {// @Bean({"s3", "s4"})@Bean("s3")public Student s1(String name) {return new Student(name, 12);}@Beanpublic Student s2() {return new Student("lisi", 14);}//给 s1 传递参数@Beanpublic String name() {return "zhangsan";}
}
运行结果如下:
通过结果我们可以看到,已经成功给 name 赋值了。
但是在一个程序中,可能会有多个 name 对象,那么 Spring 会使用哪个对象给 name 赋值呢?
代码如下:
@Component
public class StudentComponent {// @Bean({"s3", "s4"})@Bean("s3")public Student s1(String name) {return new Student(name, 12);}@Beanpublic Student s2() {return new Student("lisi", 14);}@Beanpublic String name() {return "zhangsan";}
}@Configuration
public class StudentConfiguration {@Beanpublic String name() {return "zhangsan111";}
}
答案是会报错,报错信息如下:
Description:The bean 'name', defined in class path resource [com/gjm/demo/config/StudentConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [com/gjm/demo/component/StudentComponent.class] and overriding is disabled.
由于有两个相同i名字的 name 对象,Spring不允许有这种情况出现,就会报错。
那如果将两个 name 方法的名字修改为不同的名字,那么程序是否能成功运行?
代码如下:
@Component
public class StudentComponent {// @Bean({"s3", "s4"})@Bean("s3")public Student s1(String name) {return new Student(name, 12);}@Beanpublic Student s2() {return new Student("lisi", 14);}//修改名字为 name1@Beanpublic String name1() {return "zhangsan";}
}@Configuration
public class StudentConfiguration {//修改名字为 name2@Beanpublic String name2() {return "zhangsan111";}
}
运行结果如下:
Description:Parameter 0 of method s1 in com.gjm.demo.component.StudentComponent required a single bean, but 2 were found:- name1: defined by method 'name1' in class path resource [com/gjm/demo/component/StudentComponent.class]- name2: defined by method 'name2' in class path resource [com/gjm/demo/config/StudentConfiguration.class]
程序依然会报错,这是因为 Spring 只需要一个 Spring类型的数据,但是我们却提供了两个,那么这时 Spring 就不知道需要使用哪一个了。
相关文章:
Spring IoC 详解
在 Spring IoC& DI 详解 中对 IoC已经有了介绍,下面对 IoC 进行详细介绍。 IoC,即控制反转,在之前我们编写程序的时候,我们都是自己 new 出来一个对象,然后自己去管理这个对象,但是这有时候有些麻烦&a…...
oracle查询当前用户所有字段和表
在 Oracle 数据库中,可以通过查询数据字典视图来获取某个表的字段(列)信息。以下是常用的查询方法: 查询当前用户下的表字段 如果您想查看当前用户下某个表的字段信息,可以查询 USER_TAB_COLUMNS 视图: SE…...
ACL(访问控制列表)
ACL(访问控制列表) 1、基础内容 访问控制列表ACL(Access ControlList)是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址、目的地址、端口号等。通过一系列规则来匹配报文,如…...
C语言数据结构---二叉树---堆的应用
1.建堆(向上调整) 1.1大堆 #include<stdio.h> void swap(int *p1,int *p2) {int temp *p1;*p1 *p2;*p2 temp; } void Ajustup(int *a,int child)//向上调整 {int parent (child - 1) / 2;while (child > 0){if (a[child] > a[parent]…...
在Linux下安装Gitlab
在Cenos7下安装GitLab 在ssh下安装 官方安装文档:https://gitlab.cn/install/?versionce 1. 使用阿里YUM 镜像云 下载 https://mirrors.aliyun.com/repo/Centos-7.repo替换 /etc/yum.repos.d/CentOS-Base.repo在目录/etc/yum.repos.d/下执行如下命令: curl …...
【算法】快速排序、归并排序(非递归版)
目录 一、快速排序(非递归) 1.原理 2.实现 2.1 stack 2.2 partition(array,left,right) 2.3 pivot - 1 > left 二、归并排序(非递归) 1.原理 2.实现 2.1 gap 2.1.1 i 2*gap 2.1.2 gap * 2 2.1.3 gap < array.…...
如何自学机器学习?零基础到实战的完整路径
机器学习作为人工智能的核心领域,已成为技术人必备的硬实力。本文为自学者梳理出一条从零基础到项目落地的系统学习路线,涵盖知识框架、工具链与实战技巧。 一、构建三大基础模块(1-2个月) 数学基石:线性代数重点掌握…...
PHP开发环境搭建(Hbuider+phpstudy)
目录 1.Hbuider下载 Hbuider的网址 2.Hbuilder的安装 1-首先找到刚刚下载的安装包 2-然后进行解压 3-进入解压后的文件夹HBuilderX,找到HBuilderX这一项,双击打开 4-选择你喜欢的风格,任意选择一个就可以了 5-选择你选快捷键的方案 6-点击开始体验就可了…...
【4.1.-4.20学习周报】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要Abstract一、方法介绍1.1HippoRAG 1.2HippoRAG2二、实验2.1实验概况2.2实验代码2.3实验结果 总结 摘要 本博客介绍了论文《From RAG to Memory: Non-Parametri…...
vim笔记
vim三种模式切换 命令常用 复制粘贴...
【JAVA】基础知识“抽象类”详解,从入门到理解~
目录 1. 抽象类 1.1 什么是抽象类❓ 1.2 为什么需要抽象类❓ 1.3 抽象类语法 1.4 抽象类特征 ① 抽象类是被abstract修饰的 ② 被abstract修饰的方法称为抽象方法,这个方法可以没有具体的实现 ③ 当一个类中含有抽象方法的时候,该类必须使用abst…...
docker 启动mysql9认证失败
docker compose 启动mysql9认证失败 随着mysql更新到了9版本,在docker中相较于8减少了一些体积,很吸引人尝试, 但是在使用原本的配置文件拉起mysql,连接时却提示权限认证失败 1045 - Access denied for user root172.18.0.1 (…...
【Axure绘制原型】图片切割、交互动效、热区、动态面板、元件显示隐藏、表单元件、表格、内联框架
切割 功能:将图片切成多部分。 通过移动鼠标可以调整两条虚线的位置,点击。虚线相当于切割刀,被虚线分离的部分将变成单独的图 切割后的图片: 交互 交互动效的构成: 目标:谁触发交互(元…...
DeepSeek智能时空数据分析(一):筛选特定空间范围内的POI数据
时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,尤其在数据驱动决策的当下,其价值正随大模型时代的到来进一步凸显。然而,三大挑战仍制约其发展:技术门槛高,需…...
使用mybatisPlus自带的分页方法+xml实现数据分页
:因为需要实现多表关联分页,原本想的是直接使用selectpagehelper,但是pagehelper只对xml文件生效;后面发现可以直接使用mybatisplus自带的分页,不依靠pagehelper实现多表关联分页; 实现类:关键…...
第六节:React Hooks进阶篇-自定义Hook设计
实战题:实现一个useWindowSize或useFetch 自定义 Hook 设计实战:useWindowSize 与 useFetch 实现详解 一、useWindowSize:实时监听窗口尺寸 1. 基础实现(TypeScript 版) import { useState, useEffect } from react…...
Mybatis--XML映射文件配置和动态SQL
XML文件配置 MyBatis中文网 动态SQL...
【Java学习笔记】位运算
位运算 一、原码,反码,补码 (1) 二进制的最高位是符号位:0 表示正数,1 表示负数(怎么记? 1旋转一下变成-) (2) 正数的原码、反码、补码都一样(三码合一) (3) 负数的反码…...
循环队列的实现
循环队列 实现一个循环队列:C语言代码解析与设计思路1. 循环队列的基本概念2. 数据结构设计3. 初始化队列4. 入队操作5. 出队操作6. 获取队列头部和尾部元素7. 判断队列是否为空或满8. 释放队列资源9. 总结 实现一个循环队列:C语言代码解析与设计思路 在…...
案例驱动的 IT 团队管理:创新与突破之路:第五章 创新管理:从机制设计到文化养成-5.2 技术决策民主化-5.2.1案例:架构设计评审的“七人决策制“
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 案例驱动的 IT 团队管理:创新与突破之路 - 第五章 创新管理:从机制设计到文化养成5.2 技术决策民主化5.2.1 案例:架构设计评审的“七人决…...
数据库—MySQL游标详解笔记
一、游标是什么? 游标(Cursor) 是数据库中用于逐行遍历查询结果集的数据库对象。它允许开发者像操作指针一样逐行读取数据,适用于需要对查询结果逐行处理的复杂业务逻辑。 核心特点: 逐行操作:类似编程中…...
Genspark:重新定义AI搜索与代理的全能型工具
在当今快速发展的AI技术领域,搜索工具正在经历前所未有的变革。Genspark,这家由前百度高管景鲲和朱凯华创立的AI公司,为我们带来了全新的AI代理引擎体验。作为一位专注于AI工具分享的博主,今天我将为大家详细介绍这款强大的工具&a…...
深入理解设计模式之模板方法模式 1d87ab8b42e98069b6c2c5a3d2710f9a
深入理解设计模式之模板方法模式 深入理解设计模式之模板方法模式 在软件开发的漫长征程中,我们常常会遇到各种复杂的业务逻辑,其中部分逻辑具有相似的流程框架,但在具体细节上又有所不同。这种情况下,模板方法模式就如同一位得…...
Cursor + MCP,实现自然语言操作 GitLab 仓库
本分分享如何使用 cursor mcp 来操作极狐GitLab 仓库,体验用自然语言在不接触极狐GitLab 的情况下来完成一些仓库操作。 极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitL…...
界面开发框架DevExpress XAF实践:如何在Blazor项目中集成.NET Aspire?(一)
DevExpress XAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 .NET As…...
【C++】特化妙技与分文件编写 “雷区”
目录 目录非类型模板参数非类型模板参数vs宏代换 模板的特化函数模板的特化函数模板特化的坑 类模板特化全特化偏特化 模板分离编译原理解决方案 end 目录 非类型模板参数 模板参数可分为类型形参和非类型形参。 类型形参: 出现在模板参数列表中,跟在…...
qt+mingw64+cmake+libqrencode项目编译和搭建成功记录
最近要使用高拍仪拍照获取照片,然后识别照片中的二维码数据、使用QZxing只能识别出一个条码、另外一个条码准备测试用其他的开源项目(如libqrencode-4.1.1)来进行测试,故进行本文的项目环境搭建测试,最后成功。 本机开…...
观察者设计模式详解:解耦通知机制的利器
在面向对象设计中,设计模式为我们提供了通用的解决方案,以应对常见的开发问题。观察者设计模式是其中非常经典且实用的一种模式,广泛应用于GUI系统、事件处理、消息推送等场景。今天,我们就深入探讨观察者模式的概念、结构和特点&…...
Vim使用完全指南:从基础到高效编辑
Vim使用完全指南:从基础到高效编辑 一、Vim简介与基本概念 Vim(Vi IMproved)是从vi发展出来的一个功能强大的文本编辑器,以其高效性和灵活性著称,特别适合程序开发和系统管理任务。与常规文本编辑器不同,…...
C语言——数组
在C语言中,数组是一组相同类型元素的集合,并且每个数据都有自己对应的一个序号,我们称之为数组下标或者索引。接下来我们就来看看数组是如何定义的吧! 目录 1.一维数组 1.1 定义与初始化 1.2 一维数组的使用 1.3 一维数组在内…...
电商|基于java+vue的农业电商系统(源码+数据库+文档)
农业电商系统 目录 基于java的农业电商系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台: 后台: 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️…...
ServletContextAttributeListener 的用法笔记250417
ServletContextAttributeListener 的用法笔记250417 以下是关于 ServletContextAttributeListener 的用法详解,涵盖核心方法、实现场景、注意事项及最佳实践,帮助您有效监听应用级别属性(ServletContext)的变化: 1. 核…...
iptables 防火墙
目录 熟悉Linux防火墙的表,链结构 理解数据包匹配的基本流程 学会编写iptables规则 前言 在当今信息化时代,网络安全已成为企业和个人不可忽视的重要议题。随着网络攻击手段的不断升级,构建一个坚固的网络安全防线显得尤为迫切。在Linux系统中,iptables作为一款…...
【厦门大学】DeepSeek大模型及其企业应用实践
DeepSeek大模型及其企业应用实践 前言1. 大模型:人工智能的前沿1.1 大模型的概念1.2 大模型的发展历程1.3 人工智能与大模型的关系1.4 大模型的分类 2. 大模型产品2.1 国外的大模型产品2.2 国内的大模型产品2.3 主流大模型“幻觉”评测 3. 大模型的行业应用3.1 自然…...
解锁智能制造:PLC远程下载如何让设备运维效率提升10倍?
一、2025年远程运维的三大变革驱动力 政策强制: 欧盟CE新规要求:2025年起工业设备必须具备远程审计接口 中国等保2.0:工业控制系统远程访问需达到三级防护 技术成熟: 5G专网边缘计算实现ms级响应 算法自动诊断PLC程序异常&#x…...
卷积神经网络CNN(李宏毅)
目录 怎么把一张影响当成一个模型输入? 同样的 pattern出现在图片不同的位置。 第三个问题:Pooling: 阿尔法Go是怎么下围棋的: CNN不能处理的问题 CNN专门用在影像辨识方面 怎么把一张影响当成一个模型输入? 一张…...
URL / GET请求 中文UTF-8编码JS转化
以长颈鹿为例 decodeURIComponent 将编码转为中文 encodeURIComponent 会对整个参数字符串转义(包括 :// 等符号)。 encodeURI 仅转义非合法 URL 字符(不转义 :/?& 等保留字符)。 decodeURIComponent("%E9%95%BF%E9…...
Flink 内部通信底层原理
Flink 集群内部节点之间的通信是用 Akka 实现,比如 JobManager 和 TaskManager 之间的通信。而 operator 之间的数据传输是用 Netty 实现。 RPC 框架是 Flink 任务运行的基础,Flink 整个 RPC 框架基于 Akka 实现。 一、相关概念 RPC(Remote Procedure Call) 概念 定义:…...
async-profiler火焰图找出耗CPU方法
事情起于开发应用对依赖的三方包(apache等等)进行了升级后(主要是升级spring),CPU的使用率较原来大幅提升,几个应用提升50%-100%。 查找半天,对比每次版本的cpu火焰图,看不出有什么…...
深入理解Qt状态机的应用
深入理解Qt状态机的应用 Chapter1 深入理解Qt状态机的应用(一)什么是有限状态机?状态机的组成应用示例交通信号控制灯系统简单在线购物流程系统 Qt状态机框架Qt状态机框架组成常用接口说明 应用示例源码 Chapter2 深入理解Qt状态机的应用&…...
Python入门安装和语法基础
1.Python简介 Python是解释型语言, ython就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写&am…...
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(四)
一、无覆盖和放弃 在基于磁贴的延迟呈现 (TBDR) 体系结构上呈现内容: Direct3D 11.1 中的呈现目标现在可以使用一组新的资源 API 来支持放弃行为。 开发人员必须了解此功能,并调用额外的 Discard () 方法,以在 TBDR 体系结构 (更高效地运行…...
如何分析服务器日志以追踪黑客攻击行为
分析服务器日志是追踪黑客攻击行为的关键手段。通过系统性地检查日志文件,可以发现异常访问模式、入侵痕迹和后门活动。以下是详细的日志分析方法: 一、重点日志文件定位 Web服务器日志 Nginx: /var/log/nginx/access.log(访问日志࿰…...
React 对state进行保留和重置
对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置,React 可以跟踪哪些 state 属于哪个组件。你可以控制在重新渲染过程中何时对 state 进行保留和重置。 开发环境:Reacttsantd 学习内容 React 何时选择保留或重置状态…...
EmbeddingBag介绍与案例
我们可以用一个具体的例子来说明 EmbeddingBagCollection 的核心作用和它如何处理用户特征。假设我们的用户特征包括 “item_id” 和 “cate_id” 两个字段,每个字段都有各自的离散取值,也就是一些整数 ID。为了让模型能处理这些离散数据,我们…...
css button 点击效果
<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>button点击效果</title><style>#container {display: flex;align-items: center;justify-content: center;}.pushable {position: relat…...
Missashe考研日记-day22
Missashe考研日记-day22 1 专业课408 学习时间:3h学习内容: 先把昨天关于进程调度的课后习题做了,然后花了挺长时间预习OS的最最最最重要的一部分——同步与互斥问题,这部分大二上课的时候就懵懵懂懂的,得认真再领悟…...
二十、FTP云盘
1、服务端 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h>…...
SVM-RF回归预测matlab代码
数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比例为8:1:1 模块化结构: 代码将整个流程模块化,使得代码更易于理解和维护。不同功能的代码块被组织成函数或者独立的模块,使得代码逻辑清晰,结构化程…...
Lombok @Builder 注解的进阶玩法:自定义 Getter/Setter 方法全攻略
大家好呀!👋 今天我们来聊聊 Java 开发中超级实用的 Lombok 库,特别是它的 Builder 注解。很多小伙伴都用过 Builder 来简化对象的创建,但你们知道吗?当我们需要自定义 getter/setter 方法时,Builder 也能玩…...