Spring6全面详解

2023-05-16

Spring6全面详解

  自2022年11月,Spring6正式发布。在Spring6中,对于JDK的要求最低为 17+。(17 - 19)

部分文本摘抄于尚硅谷视频(bilibili)做了一定的排版和个人的理解。如果不是很熟悉,可以去看
Spring5全面详解 内容大约十万字左右, 对于Spring5的使用整理的较为全面,也都有解释部分,Spring6只是看以下是否具有一些特性上的更换。所以可能并没有Spring5的内容详细。但本篇大约在8-10万字左右。持续进行编写。


1. Spring6概述

1.1 Spring核心模块

在spring6中,Core的核心模块有以下内容

  1. IOC
  2. Container
  3. Events
  4. Resources
  5. i18n
  6. Validation
  7. Data Binding
  8. Type Conversion
  9. SpEL
  10. 10.AOP
  11. AOT(静态编译)

在这里插入图片描述


1.1.1 Spring Core

SpringCore提供了IOC,DI,Bean配置装载创建的核心实现。核心概念:Beans,BeanFactory,BeanDefinitons,ApplicationContext。

  • Spring-Core(IOC和DI的基本实现)
  • Spring-Beans (BeanFactory和Bean的装配管理(BeanFactory))
  • Spring-Context(SpringContext上下文,即IOC容器(ApplicationContext)
  • Spring-Expression (Spring表达式语言)

1.1.2 Spring Aop

  • Spring-Aop 面向切面编程的应用模块,整合ASM,CGLib,JDK Proxy。
  • Spring-Aspect 集成AspectJ,Aop应用框架。
  • Spring-Instrument 动态Class Loading模块。

1.1.3 Spring Data Access

  • Spring-JDBC 属于是Spring对Jdbc的封装,用于简化JDBC的使用方法。
  • Spring-Orm 是Java对象与数据库数据映射的框架。
  • Spring-Oxm 是对象与Xml文件的映射框架。
  • Spring-Jms 是Spring对 Java Message Service(Java消息服务)的封装,用于服务间的相互通信。
  • Spring-Tx 是Spring的事务管理。

1.1.4 Spring Web

  • Spring-Web 是最基础的Web支持,建立于Spring-Context之上,通过Servlet和Listener来初始化Ioc容器。
  • Spring-WebMvc 实现了Web Mvc。
  • Spring-WebSocket 与前端的双工通信协议。
  • Spring-WebFlux 是Spring5.0+提供的,用于取代传统是Java Servlet,非阻塞式Reactive Web框架,异步,非阻塞,事件驱动服务。

1.1.5 Spring Message

  • Spring-Messaging 是Spring4.0+提供的,用于为Spring集成一些基础的报文传送服务。

1.1.6 Spring Test

  • Spring-Test 对于测试的支持,主要是针对于Junit的封装。



2. Spring6体验

2.1 引入Spring相关的依赖需求

    <dependencies>

        <!-- 引入spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.3</version>
        </dependency>

        <!-- 引入Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        
		<!-- 引入LomBok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>

    </dependencies>

2.2 创建实体类和对应的XML配置文件

新建一个包,里面包含一个User实体类。 pojo -> User.java。然后User内含有以下代码。

package org.example.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class User {

    private String username;

    private String password;

    private Integer age;

    private String phoneNumber;

}

然后去创建对应的Spring配置文件。可以在Idea中快捷去创建对应的配置文件。右键resources的包,然后new —>
XML Configuration File。即可。创建完成后, 使Spring对我们的User类进行托管。

<?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="user" class="org.example.pojo.User">
        <property name="username" value="张三" />
        <property name="password" value="123456" />
        <property name="age" value="18" />
        <property name="phoneNumber" value="12368965432" />
    </bean>

</beans>

在完成上述步骤后,在一个具有Main方法的类中,去进行测试。

package org.example;

import org.example.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {

		// 通过Xml加载获取Ioc容器对象。
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

		// 通过Ioc容器获取Bean对象
        User user = applicationContext.getBean("user", User.class);

		// 打印对象内容,查看内容是否对的上。[User(username=张三, password=123456, age=18, phoneNumber=12368965432)]
        System.out.println(user);

    }
}

2.3 根据全包类名通过反射创建对象

Class<?> aClass = Class.forName("org.example.pojo.User");

User userClass = (User) aClass.getDeclaredConstructor().newInstance();

2.4 Spring创建好的对象放在哪里?

会放在一个Map集合里,该属性存在于 DefaultListableBeanFactory 类中。属性名称为:

 private final Map<String, BeanDefinition> beanDefinitionMap;

在该Map<String, BeanDefinition> 中。

  • Key 代表唯一标识
  • Value 代表该类的定义(描述)



3. Log4j2日志整合

3.1 Log4j2重要组件

3.1.1 日志信息的优先级

日志日志的优先级从高到低有 TRACE < DEBUG < INFO < WARN < ERROR < FATAL

  • TRACE:追踪,是日志的最低级别,相当于追踪程序的执行。
  • DEBUG:调试,一般在开发中,都将其设置为最低的级别。
  • INFO:信息,输出重要的信息,使用较多。
  • WARN:警告,输出警告的信息。
  • ERROR:错误,输出错误的信息。
  • FALTAL:重大错误。

上面这些内容主要用于指定程序日志的重要程度,优先级高的日志信息会覆盖掉优先级低的日志信息,如果你在程序中使用一条INFO级别的日志信息,则DEBUG和TRACE不会显示。


3.1.2 日志信息输出的目的地

一般来说指的是,把日志输出到控制台,或者把日志输出到文件内进行本地存储。


3.1.3 日志信息输出的格式

就是决定了你输出日志的时候,日志以什么样的形式进行输出。


3.2 引入log4j2的依赖

<!-- 引入log4j2 -->
<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.20.0</version>
</dependency>

<!-- 引入log4j2的实现,slf4j2-impl -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j2-impl</artifactId>
    <version>2.20.0</version>
</dependency>

3.3引入log4j2配置文件

首先固定名称为:log4j2.xml 文件必须放到类根路径下。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <loggers>
        <!--
            level指定日志级别,从低到高的优先级:
                TRACE < DEBUG < INFO < WARN < ERROR < FATAL
                trace:追踪,是最低的日志级别,相当于追踪程序的执行
                debug:调试,一般在开发中,都将其设置为最低的日志级别
                info:信息,输出重要的信息,使用较多
                warn:警告,输出警告的信息
                error:错误,输出错误信息
                fatal:严重错误
        -->
        <root level="DEBUG">
            <appender-ref ref="spring6log"/>
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="log"/>
        </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>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
        <File name="log" fileName="d:/spring6_log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!-- 这个会打印出所有的信息,
            每次大小超过size,
            则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,
            作为存档-->
        <RollingFile name="RollingFile" fileName="d:/spring6_log/app.log"
                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="50MB"/>
            <!-- DefaultRolloverStrategy属性如不设置,
            则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </appenders>
</configuration>

在配置完成后,他是自动实现的。你在重新去执行Main方法的时候,就会看到对应的日志信息。同时目录下还会生成两个.log文件。

2023-03-02 10:41:18 889 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2b72cb8a
2023-03-02 10:41:18 997 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 1 bean definitions from class path resource [applicationContext.xml]
2023-03-02 10:41:19 024 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'user'
User(username=张三, password=123456, age=18, phoneNumber=12368965432)

3.4 手动使用log日志

我们可以在我们的代码中,加入Log日志的使用。需要我们定义一个成员变量。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private final Logger logger = LoggerFactory.getLogger(Main.class);

完整代码

package org.example;

import org.example.pojo.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Main {

    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) throws Exception {

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

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

        System.out.println(user);
        
        logger.info("我们执行了Main方法");

    }
}

得到的日志结果为:

2023-03-02 10:46:07 133 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@490caf5f
2023-03-02 10:46:07 209 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 1 bean definitions from class path resource [applicationContext.xml]
2023-03-02 10:46:07 225 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'user'
User(username=张三, password=123456, age=18, phoneNumber=12368965432)
2023-03-02 10:46:07 263 [main] INFO org.example.Main - 我们执行了Main方法

在方法内,不止可以使用info方法,其他级别的都可以使用,有DEBUG,有ERROR等各种级别的方法供来调用。




4. IOC容器

IOC是 Inversion of Control 的简写,译为 “控制反转”,他不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们设计出低耦合,优良的程序。

Spring通过Ioc来控制对象之间的创建和初始化,控制对象与对象之间的依赖关系,我们从IOC容器中获取到的Java对象称为Spring Bean对象。它与使用 new 关键字创建的Java对象没有任何区别。


4.1 控制反转

  • 控制反转是一种设计思想。
  • 是为了减少程序的耦合度,提高扩展能力。
  • 控制反转的内容将对象的创建权交给Spring Ioc来进行管理。将对象与对象之间的关系交给Ioc管理。
  • 通过DI(Dependency Injection) 依赖注入实现控制反转。

4.2 依赖注入

DI(Dependency Injection) 依赖注入实现控制反转。
常见的DI注入方式主要是以下两种:

  • 构造器注入
  • Set方法注入
    所以结论是,IOC是一种控制反转的思想,DI是对于控制反转思想的实现。

4.3 IOC容器在Spring的实现

Spring 的Ioc 容器就是IOC思想的一个落地实现。IOC内管理的内容组件称为Bean,在创建Bean之前,需要先创建IOC容器。对于IOC容器的实现,Spring提供了两种实现方式。


4.3.1 BeanFactory

该接口是针对于IOC的基本实现,但是该接口不面向开发人员,用于Spring内部开发使用。

4.3.2 ApplicationContext

BeanFactory的子接口,拥有比BeanFactory更多的特性,做了很多增强,面向开发人员,在绝大部分场景下,我们选择使用ApplicationContext,而不是使用底层的BeanFactory。


4.4 手写IOC容器(通过反射)

4.4.1 获取Class对象的三种方式

  • 通过对象名称 + .class : User.class
  • 通过全类名来加载类 : Class.forName(“全包类名”)
  • 通过对象来获取class对象 : new User().getClass()
// 获取Class对象的多种方式
@Test
public void test01() throws ClassNotFoundException {

    // 第一种方式 通过对象 .class
    Class<User> userClass = User.class;

    // 第二种方式 通过forName来获取class对象
    Class<?> aClass = Class.forName("org.example.pojo.User");

    // 第三种方式,通过new对象来获取class
    Class<? extends User> aClass1 = new User().getClass();
    
	// 通过反射创建对象
	User user = userClass.getDeclaredConstructor().newInstance();
	
	System.out.println(user);
    
}

4.4.2 通过反射获取对象的构造方法

有两种获取全部构造器的方式,分别是

  • getConstructors()
    • 获取该类中的所有的有参构造无参构造,但是只能获取public修饰的构造方法,private修饰的则无法访问
  • getDeclaredConstructors()
    • 与第一个不同且增强,可以获取到private修饰的构造方法,也可以获取到public修饰的构造方法。

代码示例

// 通过反射获取构造方法。
@Test
public void test02() throws Exception {

    Class<User> userClass = User.class;

    // 第一种获取方式(针对public修饰过的构造方法)
    Constructor<?>[] constructors = userClass.getConstructors();

    for (Constructor<?> constructor : constructors) {
        System.out.println("构造器名称: " + constructor.getName() + "\n参数个数: " + constructor.getParameterCount());
    }

    // 第二种获取方式(可以获取到private修饰的构造方法)
    Constructor<?>[] declaredConstructors = userClass.getDeclaredConstructors();

    for (Constructor<?> declaredConstructor : declaredConstructors) {
        System.out.println("构造器名称: " + declaredConstructor.getName() + "\n参数个数: " + declaredConstructor.getParameterCount());
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring6全面详解 的相关文章

  • 开始

    文章目录 徐工本科生 希望明天更好 xff0c 今天开始扬帆起航 新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右
  • Linux-生产者消费者模型

    生产者消费者模型 生产者消费者模型概念生产者消费者模型特点生产者消费者模型优点基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型 模拟实现生产者消费者模型多生产者和多消费者 生产者消费者模型概念 生产者消费者模型
  • Ubuntu20.04下更新系统Python版本

    起因 xff1a 写Python时报错 xff1a TypeError unsupported operand type s for 61 dict and dict 原因 xff1a python3 9 支持对 dict 类型使用 xff
  • Ubuntu密码忘记怎么办

    1 重启Ubuntu xff0c 长按shift出现以下界面 xff0c 按回车键 2 紧接着进入如下界面 xff0c 选中recovery mode的选项 xff0c 按 e 进入界面 xff0c 务必记得不要按enter键 3 找到下图
  • 小程序视频截gif_3个简单的应用程序,可让您深入视频和GIF

    小程序视频截gif Deepfakes make it possible to manipulate videos and GIFs The technology has become so easy to use you can now
  • Spring框架详解(建议收藏)

    1 什么是Spring xff1f 官网 xff1a https spring io 侠义的Spring是指Spring框架 xff08 Spring Fremework xff09 https spring io projects spr
  • Debian (Linux)安装UFW防火墙

    Debian Linux 安装UFW防火墙 1ufw简介 UFW xff0c 即简单防火墙 xff0c 是iptables的接口 xff0c 旨在简化防火墙的配置过程 尽管iptables是可靠且灵活的工具 xff0c 但对于初学者而言 x
  • 高性能动画JSON动画

    animejs 它是一个js动画库 xff0c 是对transform进行封装 xff0c 使其受js控制 拥有更高性能和很好的兼容 最重要的是 xff1a 提供了很多回调 监听方法 eg 每帧回调 每次循环回调 循环开始的回调 提供了一个
  • C++ 生产者消费者示例代码

    三部分构成 xff1a 生产者 消费者 仓储 span class token macro property span class token directive keyword include span span class token
  • 7-1 将数组中的数逆序存放 (15 分)

    7 1 将数组中的数逆序存放 15 分 本题要求编写程序 xff0c 将给定的n个整数存入数组中 xff0c 将数组中的这n个数逆序存放 xff0c 再按顺序输出数组中的元素 输入格式 输入在第一行中给出一个正整数n xff08 1 n 1
  • JavaFX学习笔记(最全,最详细)

    文章目录 Java JavaFX桌面GUI开发1 基本概念2 最小框架代码3 控件布局4 xff0c 初步认识stage窗口5 xff0c stage窗口模式 StageStyle 6 xff0c screen类的使用7 xff0c Gro
  • vue3安装和开发环境搭建

    文章目录 一 xff0c 简介二 xff0c vue cil 搭建 vue3 开发环境三 xff0c 增加typescipt 一 xff0c 简介 二 xff0c vue cil 搭建 vue3 开发环境 1 xff0c 安装 xff1a
  • 使用vite创建vue项目和使用vue-cli创建项目的区别

    文章目录 一 xff0c 介绍二 xff0c vite创建项目介绍三 xff0c vue cli创建项目介绍 xff08 1 xff09 安装升级 xff08 2 xff09 创建项目 一 xff0c 介绍 Vite 是一个 web 开发构
  • vue3中的组件通信【2】《爷孙组件通信》

    文章目录 爷孙组件通信provide inject响应性数据的传递与接收 爷孙组件通信 顾名思义 xff0c 爷孙组件是比 父子组件通信 要更深层次的引用关系 xff08 也有称之为 隔代组件 xff09 xff1a Grandfather
  • 大前端知识图谱+B站视频整合

    文章目录 前端学习路径B站视频整合网络知识超文本标记语言层叠样式表浏览器脚本语言 https www bilibili com video BV1Sy4y1C7ha https www bilibili com video BV1Sy4y1
  • 电台复活节_如何玩Android 11的隐藏复活节彩蛋游戏

    电台复活节 Justin Duino 贾斯汀 杜伊诺 Justin Duino Google includes a hidden Easter Egg with each new Android version Android 11 has
  • 【小番茄夫斯基】全网最全前端面试手撕算法题,原理手写汇总

    文章目录 深拷贝柯里化函数实现 instanceof手写 new数组去重flat 拍平数组ObjectDefineProperty实现双向数据绑定setInterval 实现 setTimeoutsetTimeout 实现 setInter
  • 【小番茄夫斯基】Pinia状态管理

    Pinia是尤雨溪强烈推荐的一款Vue状态管理工具 xff0c 也被认为是下一代Vuex的替代产品 即Vuex5 x xff0c 在Vue3 0的项目中使用也是备受推崇 优点 pinia没有mutations xff0c 只有 xff1a
  • 【小番茄夫斯基】快速掌握Express框架—从基本概念到实践应用

    Express是目前最流行的基于Node js的Web开发框架 xff0c 可以快速地搭建一个完整功能的网站 运行原理 底层 xff1a http模块 Express框架建立在node js内置的http模块上 http模块生成服务器的原始
  • cv2.xfeatures2d.SIFT_create()报错后,配置OpenCV+contrib+Python

    opencv做一些特征检测匹配 xff0c 所以需要用到opencv contrib python这个包 xff0c 因为SIFT SURF算法都已经申请专利了 xff0c 所以这两个算法不免费 xff0c 在opencv3 4 2之后的版

随机推荐

  • powershell+oh-my-posh PSReadLine 代码提示配置

    文章目录 升级 powershell安装 oh my posh 升级 powershell powershell版本要大于5 1 xff0c windows自带5 1 xff0c 查看软件版本 xff1a span class token
  • Java实现登录注册

    Day one 一 JAVA常用快捷键 ctrl 43 shift 43 t ctrl 43 shift 43 r ctrl 43 alt 43 v 二 java web 网络上一切电子设备都可以叫终端 xff0c 其中能提供服务的叫服务器
  • Ubuntu运行.sh脚本文件报错:bash: ./your_file_name.sh: /bin/bash^M: 解释器错误: 没有那个文件或目录

    文章目录 一 运行 sh脚本报错 xff1a bin bash M 解释器错误 没有那个文件或目录二 总结 一 运行 sh脚本报错 xff1a bin bash M 解释器错误 没有那个文件或目录 这个 M是windows下的结尾 r xf
  • Vxworks学习(一)_多任务、任务通信

    Vxworks学习 xff08 一 xff09 记录 VxWorks简介一 多任务1 1 任务状态1 2 Wind任务调度1 3 任务控制1 任务创建函数 xff1a 2 任务删除3 任务控制4 任务拓展函数5 任务错误errno6 任务异
  • win10 terminal 美化

    首先需要安装字体 https github com microsoft cascadia code releases 将这六个文件安装 接下来更改terminal配置文件 34 profiles 34 34 defaults 34 34 l
  • AD/Allegro:0603、0805、1206尺寸封装设计资料

    AD Allegro 0603 0805 1206尺寸封装设计资料 前言 攀登的过程也许是漫长 xff0c 但巅峰的风景是值得的 一 具体含义是什么 xff1f 封装尺寸是长x宽 xff0c 0805 0603 1206 这些单位是英制 x
  • dmg是什么文件格式_什么是DMG文件(以及我该如何使用)?

    dmg是什么文件格式 DMG files are containers for apps in macOS You open them drag the app to your Applications folder and then ej
  • 端到端模型(end-to-end)与非端到端模型

    一 端到端 xff08 end to end xff09 从输入端到输出端会得到一个预测结果 xff0c 将预测结果和真实结果进行比较得到误差 xff0c 将误差反向传播到网络的各个层之中 xff0c 调整网络的权重和参数直到模型收敛或者达
  • Ubuntu按装谷歌浏览器缺少包依赖

    1 首先去官网下载谷歌浏览器 https www google cn chrome 点击下载 选择接受并安装 点击确定 在下载里面找到自己刚下载的文件 然后点击终端打开 输入指令 sudo dpkg span class token ope
  • 【TC297的定时器模块】

    目录 前言1 高级定时器CCU62 通用定时器GTM3 通用定时器GPT12 前言 英飞凌TC297的定时器模块非常丰富 xff0c 分别有有系统定时器STM xff0c CCU6高级定时器 xff0c GTM通用定时器 xff0c GPT
  • ping不通的解决办法,简单有效

    场景 xff1a 笔记本电脑启动服务 xff0c 告诉前端IP端口 xff0c 提供测试 问题 xff1a 前端无法访问服务 xff0c 经过ping本机IP地址 xff08 ping是一个DOS命令 xff0c 一般用作检测网络通与不通
  • 08-Java框架-SpringBoot整合thymeleaf

    一 thymeleaf介绍 Thymeleaf 是新一代 Java 模板引擎 xff0c 与 Velocity FreeMarker 等传统 Java 模板引擎不同 xff0c Thymeleaf 支持 HTML 原型 xff0c 其文件后
  • (二)Linux 防火墙----网络防火墙,NET,firewalld

    文章目录 六 网络防火墙综合实验 xff1a 七 NAT2 SNAT3 DNAT xff08 重点 xff09 xff08 端口映射 xff0c 只能一对一 xff09 4 转发 xff08 端口重定向redirect xff09 重点 八
  • 内网渗透-内网穿透&猕猴桃抓密码提权&烂土豆提权

    一 SQL注入getshell 1 直接SQL语法写文件 xff08 1 xff09 Mysql导出函数 xff1a into outfile into dumpfile 可以写16进制写入 xff08 2 xff09 1290的安全性报错
  • windows10系统超全优化方法

    转自 xff1a 微点阅读 https www weidianyuedu com 度过了最初使用win10的各种不习惯 xff0c 解决了很多win10使用中的问题 今天微点阅读小编带大家看看 调教 win10的方法 xff01 希望对小伙
  • .gitignore配置

    经常在win和mac上切换开发环境 xff0c 导致从GitHub上拉代码 xff0c idea就要一直配置依赖等东西 xff0c 很多本地配置也被自动 后面发现是 gitignore 文件没有隐藏相关文件 xff0c 如下配置 xff1a
  • 机器学习算法——K-近邻算法(代码实现手写数字识别)

    0 引言 xff0c K 近邻算法是一种非常有效的分类算法 xff0c 它非常有效且易于掌握 原理 xff1a K 近邻算法通过计算不同样本之间的距离来分类物品 使用前 xff0c 我们需要有一个训练样本集 xff0c 并且样本集中每个数据
  • 在Linux上运行Windows软件的4种以上方法

    Linux has come a long way but you may still need to run Windows applications occasionally especially Windows only PC gam
  • 操作系统—概念与定义

    操作系统的概念和定义 1 1 操作系统的层次结构 操作系统OS Operating System 是指控制和管理整个计算机系统的硬件和软件资源 xff0c 并合理地组织调度计算机的工作和资源的分配 xff0c 提供用户和其他软件方便的接口和
  • Spring6全面详解

    Spring6全面详解 自2022年11月 xff0c Spring6正式发布 在Spring6中 xff0c 对于JDK的要求最低为 17 43 xff08 17 19 xff09 部分文本摘抄于尚硅谷视频 xff08 bilibili