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

【Spring】详细剖析Spring程序

文章目录

  • 一、Spring概述
    • 1. Spring简介
      • 1.1 OCP开闭原则
      • 1.2 依赖倒置原则DIP
      • 1.3 控制反转IoC
    • 2. Spring8大模块
  • 二、Spring的入门程序
    • 1. Spring官网
    • 2. 第一个Spring程序
      • 2.1 创建工程
      • 2.2 配置 pom.xml:
      • 2.3 定义bean:User . java
      • 2.4 配置文件 spring.xml
      • 2.5 编写测试程序
    • 3. 第一个Spring程序详细剖析
      • 3.1 底层创建对象原理
      • 3.2 Spring创建对象的原理
      • 3.3 对象的存储结构
      • 3.4 可有多个spring配置文件
      • 3.5 spring配置文件中的bean可以任意类
      • 3.6 getBean()方法调用
      • 3.7 ClassPathXmlApplicationContext
      • 3.8 超级父接口BeanFactory。
    • 4. Spring6启用Log4j2日志框架

一、Spring概述

1. Spring简介

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。让程序员只需关注核心业务的实现,尽可能的不再关注非业务逻辑代码(事务控制,安全日志等)。

Spring有三个重要特点:

  1. OCP开闭原则
  2. 依赖倒置原则DIP
  3. 控制反转IoC

1.1 OCP开闭原则

在软件开发过程中应当对扩展开放,对修改关闭
如果在进行功能扩展的时候,添加额外的类是没问题的,但因为功能扩展而修改之前运行正常的程序,这是忌讳的。因为一旦修改之前运行正常的程序,就会导致项目整体要进行全方位的重新测试。
这主要是因为:代码和代码之间的耦合度太高,如图所示:
在这里插入图片描述

可以看出,上层是依赖下层的,导致下面只要改动,上面必然会跟着改,这样就同时违背了另一个开发原则:依赖倒置原则

1.2 依赖倒置原则DIP

主要倡导面向接口编程,不要面向具体编程,让上层不再依赖下层,下面改动了,上面的代码不会受到牵连。这样可以大大降低程序的耦合度增强扩展力,同时增强代码复用性
例如:
在这里插入图片描述

虽然已经面向接口编程了,但 new UserDaoImplForOracle() 并没有完全面向接口编程,还是使用到了具体的接口实现类。
如果想要完全面向接口编程(完全符合依赖倒置原则),可以这样编写代码:
在这里插入图片描述

在Spring框架中,它可以帮助我们new对象,并且它还可以将new出来的对象赋到属性上。比如:
在这里插入图片描述

很显然,这种方式是将对象的创建权/管理权交出去了,不再使用硬编码的方式了。同时也把对象关系的管理权交出去了,也不再使用硬编码的方式了。像这种把对象的创建权交出去,把对象关系的管理权交出去,被称为控制反转。

1.3 控制反转IoC

(1)概念:
是面向对象编程中的一种设计思想,可以用来降低代码之间的耦合度,符合依赖倒置原则。
(2)核心:
将对象的创建权交出去,将对象和对象之间关系的管理权交出去,由第三方容器来负责创建与维护。
(3)实现方式:
依赖注入(DI)包括两种方式:

  • set方法注入
  • 构造方法注入

而Spring框架就是一个实现了IoC思想的框架
IoC可以认为是一种全新的设计模式,但是理论和时间成熟相对较晚,并没有包含在GoF中。(GoF指的是23种设计模式)

2. Spring8大模块

在这里插入图片描述

二、Spring的入门程序

1. Spring官网

官网地址:https://spring.io/
官网地址(中文):https://spring.p2hp.com/

2. 第一个Spring程序

2.1 创建工程

(1)打开IDEA创建Empty Project:spring6
(2)设置JDK版本17,编译器版本17【Spring6要求JDK最低版本是Java17
在这里插入图片描述

(3)设置IDEA的Maven:关联自己的maven
在这里插入图片描述

(4)在空的工程spring6中创建模块:spring6-002-first
在这里插入图片描述

2.2 配置 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.lm</groupId><artifactId>spring6-002-first</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><repositories><repository><id>repository.spring.milestone</id><name>Spring Milestone Repository</name><url>https://repo.spring.io/milestone</url></repository></repositories><dependencies><!-- spring context依赖,表示引入了spring的基础依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.0-M2</version></dependency><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>

2.3 定义bean:User . java

package com.lm.spring6.bean;//封装用户信息。
public class User {
}

2.4 配置文件 spring.xml

【该文件放在类的根路径下】
在这里插入图片描述

进行bean的配置,spring才可以帮助我们管理这个对象。

<?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 id="userBean" class="com.lm.spring6.bean.User"/>
</beans>
<!--Spring配置文件IDEA工具提供了这个文件的模板,一定要用这个模板来创建文件名随意,最好是放在类路径当中,方便后期移植
-->

bean的id和class属性:

  • id属性:代表对象的唯一标识,不能重名
  • class属性:用来指定要创建的java对象的类名,这个类名必须是全限定类名(带包名)

2.5 编写测试程序

package com.lm.spring6.test;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class FirstSpringTest {@Testpublic void testFirstSpringCode() {//ApplicationContext是一个接口,有很多实现类//ClassPathXmlApplicationContext专门从类路径当中加载spring配置文件的一个spring上下文对象//启动spring容器,解析spring.xml文件,实例化所有的bean对象,放在spring容器当中ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");// 根据bean的id从spring容器获取bean对象Object userBean = applicationContext.getBean("userBean");System.out.println(userBean);}
}

运行测试程序
在这里插入图片描述

3. 第一个Spring程序详细剖析

3.1 底层创建对象原理

spring是通过调用类的无参数构造方法来创建对象的

package com.powernode.spring6.bean;//封装用户信息
public class User {public User() {System.out.println("User的无参数构造方法执行");}
}

运行测试程序:
在这里插入图片描述

如果提供有参数构造方法,不提供无参数构造方法会出现异常。例如:

package com.lm.spring6.bean;//封装用户的信息
public class User {//    public User() {
//        System.out.println("User的无参数构造方法执行");
//    }public User(String s) {System.out.println("User的有参数构造方法执行");}
}

运行测试程序:
在这里插入图片描述

3.2 Spring创建对象的原理

// dom4j解析beans.xml文件,从中获取class的全限定类名
// 通过反射机制调用无参数构造方法创建对象
Class clazz = Class.forName("com.powernode.spring6.bean.User");
Object obj = clazz.newInstance();

3.3 对象的存储结构

在这里插入图片描述

3.4 可有多个spring配置文件

从源码中可以看出:
spring的配置文件可以有多个,在ClassPathXmlApplicationContext构造方法的参数上传递文件路径即可。
在这里插入图片描述

3.5 spring配置文件中的bean可以任意类

只要这个类不是抽象的,并且提供了无参数构造方法,在spring配置文件中配置的bean可以任意类
例如:JDK中的类 java.util.Date

<?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 id="userBean" class="com.lm.spring6.bean.User"/><bean id="userDaoBean" class="com.lm.spring6.dao.UserDaoImplForMySQL"/><bean id="nowtime" class="java.util.Date"/></beans>
package com.lm.spring6.test;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class FirstSpringTest {@Testpublic void testFirstSpringCode() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml", "beans.xml");// 根据bean的id从spring容器获取bean对象Object nowtime = applicationContext.getBean("nowtime");System.out.println(nowtime);}
}

运行测试程序:
在这里插入图片描述

3.6 getBean()方法调用

(1)如果指定的id不存在时,会出现异常

//Object nowtime = applicationContext.getBean("nowtime");
Object nowtime = applicationContext.getBean("nowtime2");
System.out.println(nowtime);

运行测试程序:
在这里插入图片描述

(2)getBean()方法返回的类型是Object,如果访问子类的特有属性和方法时,还需要向下转型

User user = applicationContext.getBean("userBean", User.class);

3.7 ClassPathXmlApplicationContext

ClassPathXmlApplicationContext是从类路径中加载配置文件,如果没有在类路径当中,需要使用FileSystemXmlApplicationContext类进行加载配置文件。
在这里插入图片描述

<?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 id="vipBean2" class="com.powernode.spring6.bean.Vip"/>
</beans>
ApplicationContext applicationContext2 = new FileSystemXmlApplicationContext("d:/spring6.xml");
Vip vip = applicationContext2.getBean("vipBean2", Vip.class);
System.out.println(vip);

这种方式较少用。一般都是将配置文件放到类路径当中,这样可移植性更强

3.8 超级父接口BeanFactory。

BeanFactory是Spring容器的超级接口,ApplicationContext是BeanFactory的子接口。

BeanFactory applicationContext = new ClassPathXmlApplicationContext("spring.xml");
User user = applicationContext.getBean("userBean", User.class);
System.out.println(user);

测试程序:

@Testpublic void testBeginInitBean() {//不是在调用getBean()方法的时候创建对象,执行以下代码的时候就会实例化对象new ClassPathXmlApplicationContext("spring.xml");}

在这里插入图片描述

4. Spring6启用Log4j2日志框架

从Spring5之后,Spring框架支持集成的日志框架是Log4j2。
(1)引入Log4j2的依赖

<!--log4j2的依赖--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.19.0</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j2-impl</artifactId><version>2.19.0</version>
</dependency>

(2)在类的根路径下配置 log4j2.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration><loggers><!--level指定日志级别,从低到高的优先级:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF--><root level="INFO"><appender-ref ref="spring6log"/></root></loggers><appenders><!--输出日志信息到控制台--><console name="spring6log" target="SYSTEM_OUT"><!--控制日志输出的格式--><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n"/></console></appenders>
</configuration>

(3)使用日志框架

@Testpublic void testBeginInitBean() {//不是在调用getBean()方法的时候创建对象,执行以下代码的时候就会实例化对象new ClassPathXmlApplicationContext("spring.xml");//创建日志记录器对象,获取FirstSpringTest类的日志记录器对象//只要是FirstSpringTest类中的代码执行记录日志的话,就输出相关的日志信息Logger logger = LoggerFactory.getLogger(FirstSpringTest.class);//根据不同的级别输出日志logger.info("我是一条日志消息");logger.debug("我是一条调试消息");logger.error("我是一条错误消息");}

在这里插入图片描述

相关文章:

【Spring】详细剖析Spring程序

文章目录 一、Spring概述1. Spring简介1.1 OCP开闭原则1.2 依赖倒置原则DIP1.3 控制反转IoC 2. Spring8大模块 二、Spring的入门程序1. Spring官网2. 第一个Spring程序2.1 创建工程2.2 配置 pom.xml&#xff1a;2.3 定义bean&#xff1a;User . java2.4 配置文件 spring.xml2.5…...

《MySQL数据库从零搭建到高效管理|库的基本操作》

目录 一、数据库的操作 1.1 展示数据库 1.2 创建数据库 1.3 使用数据库 1.4 查看当前数据库 1.5 删除数据库 1.6 小结 二、常用数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 一、数据库的操作 打开MySQL命令行客户端&#xff0c;安装完MySQL后会有两个客户端…...

docker部署jenkins,安装使用一条龙教程

Jenkins k8s 实现CI/CD 一、简介 1. JenKins是什么? Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2. 什么是CI / CD…...

图像识别技术与应用-YOLO

1 YOLO-V1 YOLO-V1它是经典的one-stage方法&#xff0c;You Only Look Once&#xff0c;名字就已经说明了一切&#xff01;把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01;也可以对视频进行实时检测&#xff0c;应用领域非常广&#xff01; YOLO-V1诞生与2…...

【网络通信安全】子专栏链接及简介

目录 操作系统安全&#xff1a;筑牢网络安全根基​ 网络协议安全&#xff1a;守护数据传输通道​ Web 站点安全开发&#xff1a;打造安全的网络交互平台​ 在数字化浪潮席卷的当下&#xff0c;网络通信已深度融入生活与工作的方方面面&#xff0c;从日常的线上购物、社交互动…...

Oracle比较好的几本书籍

1.《Oracle专家高级编程》 2.《Oracle高效设计》 3.《Oracle9i&10g&11g编程艺术深入数据库体系结构》 4.《让Oracle跑的更快》(1/2) ....... n.《Oracle官方文档的阅读》下面包括这几个部分&#xff0c;可以跟进研读一下&#xff1a; &#xff08;1&#xff09;《…...

忘记dedecms后台超级管理员账号和密码的解决方案

解决方案&#xff1a; 方案一、数据库修改&#xff1a; 1、前提是您能登录到数据库后台&#xff0c;登录MySQL数据库管理工具&#xff08;如phpMyAdmin&#xff09; 2、打开数据库中的 dede_admin 表&#xff0c;找到管理员记录&#xff0c;将 pwd 字段的值改成 f297a57a5a7…...

处理动态分页:自动翻页与增量数据抓取策略-数据议事厅

一、案例场景 Lily&#xff08;挥舞着数据报表&#xff09;&#xff1a;“用户反馈我们的股票舆情分析总是缺失最新跟帖&#xff01;这些动态分页像狡猾的狐狸&#xff0c;每次抓取都漏掉关键数据&#xff01;” 小王&#xff08;调试着爬虫代码&#xff09;&#xff1a;“传…...

微服务新手入门

一、微服务概念 微服务是一种软件架构风格&#xff0c;ta是以专注于单一职责的很多小型项目为基础&#xff0c;组合出复杂的大型应用。 微服务 - 服务拆分 - 远程调用 - 服务治理 - 请求路由 - 身份认证 - 配置管理 - 服务保护 - 分布式事务 - 异步通信 - 消息可靠性 - 延迟消…...

antd浏览器引入的问题

1&#xff0c;在使用ant design vue的4.1.2版本通过浏览器引入的方式遇到的问题&#xff0c;遇到的问题&#xff08;不确定其他版本有没有问题&#xff09;&#xff0c;通过在页面使用下面的代码 <a-modal v-model:open"apiOpen" title"修改秘钥" ok&q…...

STM32-Unix时间戳

一&#xff1a;什么是时间戳 Unix时间戳&#xff08;Unix Timestamp&#xff09;是一个计数器数值&#xff0c;这个数值表示的是一个从1970年1月1日0时0分0秒开始到现在所经过的秒数&#xff0c;不考虑闰秒。 时间戳存储在一个秒计数器里&#xff0c;秒计数器为32位/64位的整…...

【性能测试】Jmeter如何做一份测试报告(3)

本篇文章主要介绍Jmeter中下载插件&#xff08;Jmeter Plugins&#xff09; 如何使用监听器插件&#xff0c;线程组插件&#xff0c;梯度压测线程组 测试报告需要去关注的数据&#xff0c;怎么看测试报告图表 目录 一&#xff1a;插件下载 1&#xff1a;下载地址 2&#xff…...

游戏引擎学习第153天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 目前正在进行的是一个比较大的系统调整&#xff0c;原本预计今天会继续深入这个改动&#xff0c;但实际上在昨天的开发中&#xff0c;我们已经完成了大部分的代码编写&#xff0c;并且运行之后几乎一切都能正常工作&#x…...

CentOS7下安装MongoDB

步骤 1&#xff1a;创建 MongoDB Yum 仓库文件 你需要创建一个 MongoDB 的 Yum 仓库配置文件&#xff0c;以便从官方源下载 MongoDB。打开终端并使用以下命令创建并编辑该文件&#xff1a; sudo vi /etc/yum.repos.d/mongodb-org-7.0.repo 在打开的文件中&#xff0c;输入以下…...

Elasticsearch-07-Elasticsearch Java API Client-Elasticsearch 8.0 的高阶api

文章目录 es8 API基础配置和bean注入高阶使用1&#xff1a;引入elasticsearchClient2&#xff1a;查询所有索引3&#xff1a;查询某个索引4:创建索引5:删除指定索引6:查询索引的映射7:创建索引指定映射8:创建文档使用HashMap作为数据存储容器使用自定义类作为数据存储容器使用外…...

【性能优化】MySQL 生产环境 SQL 性能优化实战案例

&#x1f680; MySQL 生产环境 SQL 性能优化实战案例 &#x1f3d7;️ 背景介绍 最近在处理一个项目时&#xff0c;发现在生产环境的工作流相关接口中&#xff0c;某些查询的执行时间异常缓慢&#xff0c;尽管数据量仅为 2 万条。经过分析&#xff0c;发现以下 SQL 语句执行非…...

Docker容器安装软件(完整版)

文章目录 一、安装Docker1.1 docker 相关的命令1.2 配置镜像加速 二. 安装es2.1 创建网络2.2 拉取镜像2.3 创建挂载点目录2.4 部署单点es&#xff0c;创建es容器2.5 编写elasticsearch.yml2.6 重启es容器2.7 测试Elasticsearch是否安装成功 三. 基于Docker安装Kibana3.1 拉取镜…...

DeepSeek-进阶版部署(Linux+GPU)

前面几个小节讲解的Win和Linux部署DeepSeek的比较简单的方法&#xff0c;而且采用的模型也是最小的&#xff0c;作为测试体验使用是没问题的。如果要在生产环境使用还是需要用到GPU来实现&#xff0c;下面我将以有一台带上GPU显卡的Linux机器来部署DeepSeek。这里还只是先体验单…...

11. Pandas :操作Excel文件(Excel报表的案例研究)

从一个装有各种 Excel 文件的文件夹开始&#xff0c;这些文件需要被整合到 Excel 报表中。 它们包含了虚构的电信运营商在全美各营业厅的套餐&#xff08;金、银、铜&#xff09;销售情况。每个月有两个文件&#xff0c;子文件夹 new 中的是新用户&#xff0c;子文件夹 existin…...

Qt开源控件库(qt-material-widgets)的编译及使用

项目简介 qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。 项目地址 项目地址&#xff1a;qt-material-widgets 本地构建环境 Win11 家庭中文版 VS2019 Qt5.15.2 (MSVC2019) 本地构建流程 克隆后的目录结构如图&#xff1a; 直接使用Qt Crea…...

freeswitch(多台服务器级联)

亲测版本centos 7.9系统–》 freeswitch1.10.9本人freeswitch安装路径(根据自己的路径进入)/usr/local/freeswitch/etc/freeswitch使用场景: 使用服务器级联需要双方网络可以ping通,也就是类似局域网内,比如A服务器IP 192.168.1.100 B服务器 192.168.1.101,通过C设备注册…...

【大模型统一集成项目】让 AI 聊天更丝滑:WebSocket 实现流式对话!

&#x1f31f; 在这系列文章中&#xff0c;我们将一起探索如何搭建一个支持大模型集成项目 NexLM 的开发过程&#xff0c;从 架构设计 到 代码实战&#xff0c;逐步搭建一个支持 多种大模型&#xff08;GPT-4、DeepSeek 等&#xff09; 的 一站式大模型集成与管理平台&#xff…...

qt 多进程使用共享内存 ,加速数据读写,进程间通信 共享内存

Summary: 项目中我们有时需要使用共享内存共享数据&#xff0c;这样&#xff0c;数据不用进程IO读写&#xff0c;加进数据加载和落地&#xff1b; 程序退出时&#xff0c;再保存到本地&#xff1b;速度提升数十倍&#xff1b; Part1:QSharedMemory Windows平台下进程间通信…...

OpenHarmony-分布式硬件关键技术

前言&#xff1a; OpenHarmony是一款面向未来万物互联场景的操作系统&#xff0c;其设计采用了分布式架构。那么OpenHarmony相比于传统操作系统有哪些关键的分布式技术&#xff0c;本文主要介绍分布式硬件设计理念、跨端分布式硬件核心挑战、以及OpenHarmony分布式硬件平台关键…...

idea超级AI插件,让 AI 为 Java 工程师

引言​ 用户可在界面中直接通过输入自然语言的形式描述接口的需求&#xff0c;系统通过输入的需求自动分析关键的功能点有哪些&#xff0c;并对不确定方案的需求提供多种选择&#xff0c;以及对需求上下文进行补充&#xff0c;用户修改确定需求后&#xff0c;系统会根据需求设…...

深入Flink运行时架构:JobManager与TaskManager协作全解析

深入Flink运行时架构:JobManager与TaskManager协作全解析 一、Flink分布式执行模型剖析 1.1 运行时架构全景视图 核心组件交互关系: #mermaid-svg-tMSqMSsKP6vwUZi3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…...

OSPF-单区域的配置

一、单区域概念&#xff1a; 单区域OSPF中&#xff0c;整个网络被视为一个区域&#xff0c;区域ID通常为0&#xff08;骨干区域&#xff09;。所有的路由器都在这个区域内交换链路状态信息。 补充知识点&#xff1a; OSPF为何需要loopback接口&#xff1a; 1.Loopback接口的…...

每日OJ_牛客_过桥_贪心+BFS_C++_Java

目录 牛客_过桥_贪心BFS 题目解析 C代码 Java代码 牛客_过桥_贪心BFS 过桥 描述&#xff1a; dd被困在了一个迷幻森林&#xff0c;现在她面前有一条凶险的大河&#xff0c;河中央有n个神奇的浮块&#xff0c;浮块按1∼n1顺序标号&#xff0c;但两两并不相接&…...

K8S学习之基础二十七:k8s中daemonset控制器

k8s中DaemonSet控制器 ​ DaemonSet控制器确保k8s集群中&#xff0c;所有节点都运行一个相同的pod&#xff0c;当node节点增加时&#xff0c;新节点也会自动创建一个pod&#xff0c;当node节点从集群移除&#xff0c;对应的pod也会自动删除。删除DaemonSet也会删除创建的pod。…...

79.ScottPlot的MVVM实现 C#例子 WPF例子

如何通过数据绑定在 WPF 中实现动态图像显示 在 WPF 应用程序中&#xff0c;通过数据绑定实现动态图像显示是一种高效且优雅的方式。以下是一个简单的教程&#xff0c;展示如何使用 ScottPlot.WPF 库和 MVVM 模式来实现这一功能。 第一步&#xff1a;安装必要的 NuGet 包 首…...

第44天:WEB攻防-PHP应用SQL盲注布尔回显延时判断报错处理增删改查方式

时间轴&#xff1a; 44天知识点总结&#xff1a; 1.mysql的增删改查功能 2.根据源码sql语句的三种sql注入&#xff1a;布尔盲注&#xff08;必须要有回显&#xff09; 延时判断&#xff08;都可以&#xff09; 报错回显&#xff08;必须要有报错处理机制&#xff09; 3.两个cms…...

说说人工智能

1. 人工智能与机器学习 核心进展 人工智能&#xff08;AI&#xff09;与机器学习&#xff08;ML&#xff09;已从理论研究全面渗透到实际应用中。深度学习模型如Transformer架构在自然语言处理&#xff08;NLP&#xff09;和计算机视觉&#xff08;CV&#xff09;领域实现突破…...

懒加载(Lazy Loading):原理、实现与优化策略

懒加载&#xff08;Lazy Loading&#xff09; 是一种优化网页性能的技术&#xff0c;主要用于延迟加载非关键资源&#xff08;如图片、视频、脚本等&#xff09;&#xff0c;直到它们真正需要被使用时才加载。懒加载可以显著减少页面初始加载时间&#xff0c;降低带宽消耗&…...

HTML5(Web前端开发笔记第一期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 三件套标签标题标签段落标签文本格式化标签图像标签超链接标签锚点链接默认链接地址 音频标签视频标签 HTML基本骨架综合案例->个人简介列表表格表单input标签单选框radio上传…...

Linux学习(十五)(故障排除(ICMP,Ping,Traceroute,网络统计,数据包分析))

故障排除是任何 Linux 用户或管理员的基本技能。这涉及识别和解决 Linux 系统中的问题。这些问题的范围包括常见的系统错误、硬件或软件问题、网络连接问题以及系统资源的管理。Linux 中的故障排除过程通常涉及使用命令行工具、检查系统和应用程序日志文件、了解系统进程&#…...

SVN 拉取,文件冲突 解决办法

情景 svn 在拉取代码时 提示 已跳过&#xff0c;其余有冲突 &#xff0c;警告至少还有一个的文件处于冲突状态 导致文件拉取失败 一、原因 版本库和本地工作副本之间存在文件冲突&#xff0c;导致文件无法正常拉取。 二、 Terminal 窗口解决办法 1.查看冲突文件 在 Termin…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.1.1基于ES的语义搜索(BERT嵌入向量)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 基于Elasticsearch与BERT的语义搜索架构设计与实战1. 传统搜索的局限性与语义搜索的崛起1.1 关键词搜索 vs 语义搜索1.2 Elasticsearch向量检索演进历程关键版本特性对比 2.…...

【Node.js】--- win11安装 Node.js

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Node.js】--- win11安装 Node.js 开发环…...

【技海登峰】Kafka漫谈系列(九)SpringBoot整合Kafka多数据源配置

【技海登峰】Kafka漫谈系列(九)SpringBoot整合Kafka多数据源配置 Kafka官方提供了基于Java实现的客户端kafka-clients,用于提供生产者和消费者的基本能力。在此基础上,Spring for Apache Kafka(spring-kafka)项目对该原生客户端进行了基于Spring特性的抽象与封装,实现了基…...

【MySQL篇】基本查询实战OJ

本篇是基于上篇mysql基本查询的一些OJ题 MySQL基本查询传送门&#xff1a;【MySQL篇】MySQL基本查询详解-CSDN博客 批量插入数据_牛客题霸_牛客网 insert语句 insert into actor values (1,PENELOPE,GUINESS,2006-02-15 12:34:33); insert into actor values (2,NICK,WAHLBER…...

侯捷 C++ 课程学习笔记:C++内存管理机制

内存管理从平地到万丈高楼 内存管理入门&#xff08;Memory Management 101&#xff09; 需要具有动态分配并使用memory&#xff08;存储&#xff08;器&#xff09;&#xff0c;&#xff08;计算机的&#xff09;内存&#xff09;&#xff0c;使用过C标准库的容器&#xff0…...

java后端开发day31--集合进阶(一)-----Collection集合List集合数据结构1

&#xff08;以下内容全部来自上述课程&#xff09; 1.集合体系结构 List系列集合&#xff1a;添加的元素是有序、可重复、有索引。 Set系列集合&#xff1a;添加的元素是无序、不重复、无索引。 2.Collection集合 Collection是单列集合的祖宗接口&#xff08;不可直接创建…...

TA学习之路——1.4 MVP矩阵运算

1.变换矩阵的意义 1.将3D物体转化到2D平面 2.为各个空间的运用做准备 2.MVP矩阵代表什么 MVP矩阵分别是模型&#xff08;Model&#xff09;、观察&#xff08;View&#xff09;、投影&#xff08;Projecttion)三个矩阵。我们顶点坐标起始于局部空间&#xff08;Local Space)…...

Java数据结构第二十期:解构排序算法的艺术与科学(二)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、常见排序算法的实现 1.1. 直接选择排序 1.2. 堆排序 1.3. 冒泡排序 1.4. 快速排序 一、常见排序算法的实现 1.1. 直接选择排序 每⼀次从待排序的数据元素中选出最小的⼀个元素&#xff0c;存放在…...

【机器学习】主成分分析法(PCA)

【机器学习】主成分分析法&#xff08;PCA&#xff09; 一、摘要二、主成分分析的基本概念三、主成分分析的数学模型五、主成分分析法目标函数公式推导&#xff08;梯度上升法求解目标函数&#xff09;六、梯度上升法求解目标函数第一个主成分七、求解前n个主成分及PCA在数据预…...

perl、python、tcl语法中读写Excel的模块

perl、python、tcl语法中读写Excel的模块 perl、python、tcl语法中存在读写xls和xlsx格式的模块分别有&#xff1a; python ‌读取 Excel‌ ‌xlrd‌&#xff1a;支持传统 .xls 格式的读取‌ pandas‌&#xff1a;通过 read_excel() 方法支持 .xls 和 .xlsx 格式‌ ‌写入 …...

libwebsockets实现异步websocket客户端,服务端异常断开可重连

libwebsockets websocket客户端基本流程网上都有&#xff0c;我只额外优化了重连机制。 在服务器异常断开时不触发LWS_CALLBACK_CLOSED或LWS_CALLBACK_CLIENT_CONNECTION_ERROR&#xff0c;导致无法自动重连 通过定时检查链接是否可写入判断链接是否有效 // 判断wsi是否可用if …...

CAD球体密堆积3D插件V2.0

插件介绍 CAD球体密堆积3D插件V2.0版本可在AutoCAD内建立球体堆积模型&#xff0c;插件采取模拟球体在重力作用下的堆积行为&#xff0c;可生成超密堆积的几何模型及进行堆积过程的动态展示。 插件优化重力堆积物理引擎&#xff0c;新增堆积可视化界面&#xff0c;可直观查看…...

【Linux】线程池、单例模式、死锁

线程池 一.线程池1.日志和策略模式2.线程池1.Task.hpp2.Thread.hpp3.ThreadPool.hpp4.ThreadPool.cc 二.线程安全与重入问题三.线程安全的单例模式1.饿汉模式2.懒汉模式3.懒汉模式线程池1.ThreadPool.hpp2.ThreadPool.cc 四.死锁的概念1.死锁2.死锁的四个必要条件3.避免死锁 五…...

AI+视频监控电力巡检:EasyCVR视频中台方案如何赋能电力行业智能化转型

随着电力行业的快速发展&#xff0c;电力设施的安全性、稳定性和运维效率变得至关重要。传统视频监控系统在实时性、智能化及多系统协同等方面面临严峻挑战。EasyCVR视频中台解决方案作为一种先进的技术手段&#xff0c;在电力行业中得到了广泛应用&#xff0c;为电力设施的监控…...