[SSM]Spring6基础

news2024/11/17 3:47:11

目录

一、Spring启示录

1.1OCP开闭原则

1.2DIP依赖倒置原则

1.3IoC控制反转

1.4DI依赖注入

二、Spring概述

2.1Spring简介

2.2Spring八大模块

2.3Spring特点

三、Spring的入门程序

3.1Spring的文件

3.2第一个Spring程序

3.3第一个Spring程序详细剖析

3.4Spring6启用Log4j2日志框架

一、Spring启示录

  • 阅读以下代码:

  • userDao

package com.powernode.spring6.web;
​
import com.powernode.spring6.service.UserService;
import com.powernode.spring6.service.impl.UserServiceImpl;
​
public class UserAction {
    //private UserService userService = new UserServiceImpl();
​
    // 修改为
    private UserService userService;
​
    /**
     * 删除用户信息的请求
     */
    public void deleteRequest(){
        userService.deleteUser();
    }
}
 
  • UserDaoImplForMySQL

package com.powernode.spring6.dao.impl;
​
import com.powernode.spring6.dao.UserDao;
​
public class UserDaoImplForMySQL implements UserDao {
    @Override
    public void deleteById() {
        System.out.println("MySQL数据库正在删除用户信息......");
    }
}
 
  • UserDaoImplForOracle

package com.powernode.spring6.dao.impl;
​
import com.powernode.spring6.dao.UserDao;
​
public class UserDaoImplForOracle implements UserDao {
    @Override
    public void deleteById() {
        System.out.println("Oracle数据库正在删除用户数据....");
    }
}
  • UserService

package com.powernode.spring6.service;
​
public interface UserService {
​
    /**
     * 删除用户信息
     */
    void deleteUser();
}
  • UserServiceImpl

package com.powernode.spring6.service.impl;
​
import com.powernode.spring6.dao.UserDao;
import com.powernode.spring6.dao.impl.UserDaoImplForMySQL;
import com.powernode.spring6.dao.impl.UserDaoImplForOracle;
import com.powernode.spring6.service.UserService;
​
public class UserServiceImpl implements UserService {
    //private UserDao userDao = new UserDaoImplForMySQL();
​
    // 修改为
    //private UserDao userDao = new UserDaoImplForOracle();
​
    private UserDao userDao;
​
    @Override
    public void deleteUser() {
        userDao.deleteById();
    }
}
  • UserAction

package com.powernode.spring6.web;
​
import com.powernode.spring6.service.UserService;
import com.powernode.spring6.service.impl.UserServiceImpl;
​
public class UserAction {
    //private UserService userService = new UserServiceImpl();
​
    // 修改为
    private UserService userService;
​
    /**
     * 删除用户信息的请求
     */
    public void deleteRequest(){
        userService.deleteUser();
    }
}
  • Test

package com.powernode.spring6.client;
​
import com.powernode.spring6.web.UserAction;
​
public class Test {
    public static void main(String[] args) {
        UserAction userAction = new UserAction();
        userAction.deleteRequest();
    }
}

1.1OCP开闭原则

  • 以上代码违背了OCP开闭原则。

  • 什么是OCP开闭原则?

    • OCP是软件七大开发原则当中最基本的一个原则:开闭原则。

    • 对扩展开放。

    • 对修改关闭。

  • OCP原则是最核心的、最基本的,其它六个原则都是为这个原则服务的。

  • OCP开闭原则的核心:只要在扩展系统功能的时候没有修改之前写好的代码,那么就是符合OCP原则的。反之,违背了OCP原则。

  • 当系统功能扩展的时候,如果修改了之前稳定的程序,之前所有的程序都需要进行重新测试,非常麻烦。

1.2DIP依赖倒置原则

  • 什么是依赖倒置原则?

    • 面向接口编程,面向抽象编程,不要面向具体编程。

  • 依赖倒置原则的目的?

    • 降低程序之间的耦合度,提高扩展力。

  • 什么是符合依赖倒置?

    • 上不依赖下。

  • 什么是违背倒置原则?

    • 上依赖下。只要“下”一改动,“上”就收到牵连。

1.3IoC控制反转

  • 当前的程序显然违背OCP、DIP原则,怎么办?

    • 可以采用“控制反转”这种编程思想来解决这个问题。

  • 什么是控制反转?

    • 控制反转:IoC(Inversion of Control)

    • 反转

      • 不在程序当中采用硬编码的方式来new对象了。(new对象的权力交出去了)

      • 不在程序当中采用硬编码的方式来维护对象的关系了。(对象之间关系的维护权交出去了)

    • 控制反转是一种编程思想,或者叫做一种新型的设计模式,由于出现的比较新,没有被纳入GoF23种设计模式范围内。

1.4DI依赖注入

  • Spring框架实现了控制反转IoC这种思想。

    • Spring框架可以帮你new对象。

    • Spring框架可以帮你维护对象与对象之间的关系。

  • Spring是一个实现了IoC思想的容器。

  • 控制反转的实现方式有多种,其中比较重要的是:依赖注入(Dependency Injection,简称DI)。

  • 控制反转是思想,依赖注入是这种思想的具体实现。

  • 依赖注入DI,又包括常见的两种方式:

    • set注入(执行set方法给属性赋值)

    • 构造方法注入(执行构造方法给属性赋值)

  • 依赖注入中”依赖“是什么意思?”注入“是什么意思?

    • 依赖:A对象和B对象的关系。

    • 注入:是一种手段,通过这种手段,可以让A对象和B对象产生关系。

    • 依赖注入:对象A和对象B之间的关系,通过注入的手段来维护。而注入包括:set注入和构造注入。

二、Spring概述

2.1Spring简介

  • Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。

  • 从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

  • Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

  • Spring最初的出现是为了解决EJB臃肿的设计,以及难以测试等问题。

  • Spring为简化开发而生,让程序员只需关注核心业务的实现,尽可能的不在关注非业务逻辑代码(事务控制,安全日志等)。

2.2Spring八大模块

  • 注意:Spring5版本之后是8个模块。在Spring5中新增了WebFlux模块。

 

 

2.3Spring特点

  • 轻量

    • 从大小与开销两方面而言,Spring都是轻量级的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布,并且Spring所需的处理开销也是微不足道的。

    • Spring是非侵入式的:Spring应用中的对象不依赖于Spring的特定类。

  • 控制反转

    • Spring通过⼀种称作控制反转(IoC)的技术促进了松耦合。当应⽤了IoC,⼀个对象依赖的其它对象会通过被动的⽅式传递进来,⽽不是这个对象⾃⼰创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,⽽是容器在对象初始化时不等对象请求就主动将依赖传递给它。

  • 面向切面

    • Spring提供了⾯向切⾯编程的丰富⽀持,允许通过分离应⽤的业务逻辑与系统级服务(例如审

      计(auditing)和事务(transaction)管理)进⾏内聚性的开发。应⽤对象只实现它们应该做

      的——完成业务逻辑——仅此⽽已。它们并不负责(甚⾄是意识)其它的系统级关注点,例如

      ⽇志或事务⽀持。

  • 容器

    • Spring包含并管理应⽤对象的配置和⽣命周期,在这个意义上它是⼀种容器,你可以配置你的

      每个bean如何被创建——基于⼀个可配置原型(prototype),你的bean可以创建⼀个单独的实例或者每次需要时都⽣成⼀个新的实例——以及它们是如何相互关联的。然⽽,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞⼤与笨重的,难以使⽤。

  • 框架

    • Spring可以将简单的组件配置、组合成为复杂的应⽤。在Spring中,应⽤对象被声明式地组

      合,典型地是在⼀个XML⽂件⾥。Spring也提供了很多基础功能(事务管理、持久化框架集成

      等等),将应⽤逻辑的开发留给了你。

三、Spring的入门程序

3.1Spring的文件

  • docs:Spring框架的API帮助文档

  • libs:Spring框架的jar文件(用Spring框架就是用这些jar包)

  • schema:Spring框架的XML配置文件相关的约束文件

Spring的jar文件

JAR文件描述
spring-aop-5.3.9.jar这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类
spring-aspects-5.3.9.jar提供对AspectJ的支持,以便可以方便的将面向切面的功能集成进IDE中
spring-beans-5.3.9.jar这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion ofControl / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。
spring-context-5.3.9.jar这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。
spring-context-indexer-5.3.9.jar虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。
spring-context-support-5.3.9.jar用来提供Spring上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存、定时任务调度等
spring-core-5.3.9.jarSpring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。
spring-expression-5.3.9.jarSpring表达式语言。
spring-instrument-5.3.9.jarSpring3.0对服务器的代理接口。
spring-jcl-5.3.9.jarSpring的日志模块。JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging"。
spring-jdbc-5.3.9.jarSpring对JDBC的支持。
spring-jms-5.3.9.jar这个jar包提供了对JMS 1.0.2/1.1的支持类。JMS是Java消息服务。属于JavaEE规范之一。
spring-messaging-5.3.9.jar为集成messaging api和消息协议提供支持
spring-orm-5.3.9.jarSpring集成ORM框架的支持,比如集成hibernate,mybatis等。
spring-oxm-5.3.9.jar为主流O/X Mapping组件提供了统一层抽象和封装,OXM是Object Xml Mapping。对象和XML之间的相互转换。
spring-r2dbc-5.3.9.jarReactive Relational Database Connectivity (关系型数据库的响应式连接) 的缩写。这个jar文件是Spring对r2dbc的支持。
spring-test-5.3.9.jar对Junit等测试框架的简单封装。
spring-tx-5.3.9.jar为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持。
spring-web-5.3.9.jarSpring集成MVC框架的支持,比如集成Struts等。
spring-webflux-5.3.9.jarWebFlux是 Spring5 添加的新模块,用于 web 的开发,功能和 SpringMVC 类似的,Webflux 使用当前一种比较流程响应式编程出现的框架。
spring-webmvc-5.3.9.jarSpringMVC框架的类库
spring-websocket-5.3.9.jarSpring集成WebSocket框架时使用
  • 注意:如果你只是想要用Spring的IoC功能,仅需引入:spring-context即可。如果采用maven只需要引入context的依赖即可。

<!--spring context依赖-->
<!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了-->
<!--如果想使用spring的jdbc、tx,那么还需要再次添加依赖-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>6.0.3</version>
</dependency>

3.2第一个Spring程序

第一步:添加spring context、junit依赖,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.hhb</groupId>
    <artifactId>spring002-first</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--打包方式jar-->
    <packaging>jar</packaging>
​
    <!--依赖-->
    <dependencies>
        <!--spring context依赖-->
        <!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了-->
        <!--如果想使用spring的jdbc、tx,那么还需要再次添加依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.3</version>
        </dependency>
​
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
​
    </dependencies>
​
    <properties>
        <maven.compiler.source>20</maven.compiler.source>
        <maven.compiler.target>20</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
​
</project>
  • 注意:打包方式jar。

  • 当加入spring context依赖后,会关联引入其他依赖:

    • spring aop:面向切面编程

    • spring beans:IoC核心

    • spring core:spring的核心工具包

    • spring jcl:spring的日志包

    • spring expression:spring表达式

第二步:定义bean:User

package com.hhb.bean;
​
public class User {
}

第三步:编写spring的配置文件:spring.xml。该文件放在类的根路径下。

<?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.hhb.bean.User"/>
</beans>
  • Spring的配置文件,IDEA工具提供了这个模板,一定要使用这个模板来创建。

  • bean的id和class属性:

    • id:是中国bean的身份证号,不能重复,是唯一的标识。

    • class:必须填写类的全路径,全限定类名。(带包名的类名)

第四步:编写测试程序

package com.hhb.test;
​
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
​
import java.text.SimpleDateFormat;
import java.util.Date;
​
public class FirstSpringTest {
    @Test
    public void testFirstSpringCode() {
        /*
         * 第一步:获取Spring容器对象
         * ApplicationContext 翻译为:应用上下文,其实就是Spring容器。
         * ApplicationContext 是一个接口。
         * ApplicationContext 接口下有很多实现类,其中有一个实现类叫做:ClassPathXmlApplicationContext
         * ClassPathXmlApplicationContext 专门从类路径中加载spring配置文件的一个Spring上下文对象
         * 这行代码只要执行就相当于启动了Spring容器,解析spring.xml文件,并且实例化所有的bean对象,放到spring容器当中。
         * */
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
​
        //第二步:根据bean的id从spring容器中获取这个对象
        Object userBean = applicationContext.getBean("userBean");
        System.out.println(userBean);
    }
}

3.3第一个Spring程序详细剖析

  1. 在spring的配置文件中,bean标签的id是不能重名的。

  2. 底层通过反射机制调用类的无参构造方法创建对象的,所以要想让spring创建对象,必须保证无参数构造方法是存在的。

  3. 将创建好的对象存储到了Map集合中。

image.png

  1. spring配置文件的名字是随意的。

  2. spring的配置文件可以有多个。

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml", "beans.xml", "xml/beans.xml");
  1. 在配置文件中配置的类不一定是自定义的,可以使用JDK中的类。

    spring.xml

    <bean id="nowTime" class="java.util.Date"/>

    Test

    @Test
        public void testFirstSpringCode() {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml", "beans.xml", "xml/beans.xml");
    ​
            Object userBean = applicationContext.getBean("userBean");
            System.out.println(userBean);
    ​
            //Object nowTime = applicationContext.getBean("nowTime");
            //Date nowTime = (Date) applicationContext.getBean("nowTime");
            //不想强制类型转换,可以使用以下代码(通过第二个参数来指定返回的bean类型)
            Date nowTime = applicationContext.getBean("nowTime", Date.class);
            //如果bean的id不存在,不会返回null,而是出现一次
            //日期格式化
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
            String strNowTime = simpleDateFormat.format(nowTime);
            System.out.println(strNowTime);
        }
  1. getBean()方法调用时,当指定的id不存在时,会出现异常。

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

    User user = applicationContext.getBean("userBean", User.class);
  1. ClassPathXmlApplicationContext是从类路径中加载配置文件,如果没有在类路径中,需要使用FileSystemXmlApplicationContext类进行加载配置文件。这种方式很少用,一般都是将配置文件放到类路径中的,这样可移植性更强。

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

3.4Spring6启用Log4j2日志框架

  • 从Spring5之后,Spring框架支持集成的日志框架是Log4j2。

  • 如何启用日志框架:

第一步:引入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>

第二步:放在类的根路径下提供log4j2.xml配置文件(文件名固定为log4j2.xml,文件必须放到类的根路径下)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <loggers>
        <!--
            level指定日志级别,从低到高的优先级:
                ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
        -->
        <root level="DEBUG">
            <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>

第三步:使用日志框架

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/757157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LGR-145-Div.4】洛谷入门赛 #14(ABCDEI题解)

离开CSDN近五分之一坤年后&#xff0c;我又回归了&#xff0c;这段时间没刷题&#xff08;忙中考去了&#xff09;&#xff0c;于是乎参加了【LGR-145-Div.4】洛谷入门赛 #14&#xff0c;那才叫。。。&#xff08;这就是为什么没有FGH题解的原因&#xff09; T1 T352128 数字判…

【JavaEE】HTTPS及其安全机制

目录 1、什么是HTTPS 2、HTTPS的基本工作过程 2.1、使用对称密钥进行加密 2.2、使用非对称密钥进行加密 2.3、中间人攻击 2.4、证书 1、什么是HTTPS HTTPS是在HTTP协议的基础上引入了一个加密层&#xff08;SSL&#xff09;。HTTP协议内容都是按照文本的方式传输的&#x…

ChatGPT引领你掌握网站创建的秘诀!从0开始,轻松打造自己的个性化网站!

1 使用 HTML 生成一个完整的创业公司网站的落地页 prompt&#xff1a;Create a complete landing page for a start up company using HTML 生成整个网页的基础框架&#xff1a; 切换到WebStorm&#xff0c;将代码粘贴到新建的 HTML 文件。 接着右击浏览器打开 html 文件&am…

测试各个版本的飞鸽传书

测试各个版本的飞鸽传书 测试材料有windows系统的飞鸽传书有4个&#xff0c;linux系统的信使iptux&#xff08;类似飞鸽传书&#xff09;有2个&#xff0c;android系统的飞鸽传书有5个&#xff0c;都是以前下载保存在移动硬盘中&#xff0c;如今都找出来归类一起测试&#xff0…

124、仿真-基于51单片机智能电表系统设计(Proteus仿真+程序+原理图+配套资料等)

方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ&#xff0c;在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…

奇奇怪怪的知识点-EXCEL(1)

如何用Excel提取想要的数据 参考链接&#xff1a;Excel表格中如何在一串数字中提取几位数字 在日常工作中经常会用到EXCEL表格来进行数据的提取和处理&#xff0c;有时候很长一串数据我们只需要提取指定位数后面的数字&#xff0c;EXCEL中内置了很多丰富的函数可以帮助我们高…

图文讲解“延时双删”原因及必要性

目录 一、前言 二、常见更新策略 2.1 先删缓存&#xff0c;再更新数据库 2.2 先更新数据库&#xff0c;再删除缓存 2.3 普通双删 2.4 延迟双删 三、是否必要建议 一、前言 我们在实际项目中经常会使用到Redis缓存用来缓解数据库压力&#xff0c;但是当更新数据库时&…

NVIDIA Video Codec SDK简介

NVIDIA的Video Codec SDK提供API对视频进行加速编解码。最新发布版本为12.0&#xff0c;支持Windows和Linux平台。可从 https://developer.nvidia.com/video-codec-sdk-archive 下载。用于视频解码(NVDEC)和编码(NVENC)的GPU硬件加速器引擎比实时视频处理速度更快&#xff0c;非…

vue做移动端上拉加载 删除当前列表某个数据 保持当前状态 继续获取下一页不影响正常的数据

本文中使用vant组件的list列表制作的 当然主要是看这个难题的思路 不必计较用的什么组件库 换做其他的组件库 思路还是一样的 //主要思路是把点击删除的数据让后端置为false // 比如我请求了3页&#xff0c;一页10条数据 // 一共30条&#xff0c;我一条一条删除&#xff0c;点…

SU-03T语音模块

一、官网 智能公元/AI产品零代码平台 在官网中可以添加设备进行配置&#xff0c;SDK的下载 二、烧录SDK 产品实物&#xff1a; 第一步&#xff1a;接线 烧录SDK时接线&#xff1a;4根杜邦线与USB转TTL连接 B6接TX&#xff0c;B7接RX&#xff0c;GND接GND&#xff0c;VCC接…

创建一门简单的解释性编程语言并实现它的解释器

背景 最近刷到大佬的教程&#xff0c;跟着学一下 效果 开始时 输入姓名和年龄后 代码 自创编程语言SimpleScript: 自创一门简易脚本支持中文编程 (gitee.com) 解析 1.词法分析 将程序的每个字符串精准划分出来&#xff0c;形成多个单词Token 2.语法分析 将各段Token再…

Docker命令详解

一、帮助启动命令 启动docker : systemctl start docker 停止docker&#xff1a;systemctl stop docker 重启docker&#xff1a;systemctl restart docker 查看docker状态&#xff1a;systemctl status docker 开机启动&#xff1a;systemctl enable docker 查看docker概…

电动汽车路由问题的基准测试

摘要 有几家物流公司开始在日常运营中利用电动汽车&#xff08;EVs&#xff09;来减少温室气体污染。然而&#xff0c;电动汽车有限的驾驶范围可能需要在运行期间访问充电站。这些潜在的访问必须得到解决&#xff0c;避免不必要的长时间绕行。我们制定了电容式车辆路由问题&…

【Vue3】setup参数细讲!computed计算属性和watch监听属性

setup参数细讲&#xff01;computed计算属性和watch监听属性 setup细讲!setup参数&#xff0c;steup&#xff08;props&#xff0c;context&#xff09;参数1.props&#xff0c;负责接收父组件传过来的值参数2.contextcontext.attrscontext.emitcontext.slots&#xff0c; 插槽…

MySQL(六)主从复制

MySQL系列文章 MySQL&#xff08;一&#xff09;基本架构、SQL语句操作、试图 MySQL&#xff08;二&#xff09;索引原理以及优化 MySQL&#xff08;三&#xff09;SQL优化、Buffer pool、Change buffer MySQL&#xff08;四&#xff09;事务原理及分析 MySQL&#xff08;五&a…

MySQL(详细)

目录 什么是数据库? 数据库操作 表操作 数据库约束 表的设计 聚合查询 分组查询 联合查询 (多表查询) 索引 事务 JDBC 什么是数据库? 数据库是一类软件 , 它是用来组织、保存、管理数据的.组织这些数据也是为了后续进行增删查改. MySQL 是一款开源免费的数据库. …

牛客网OR36 链表的回文结构

题目 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针head&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于900。 链接&#xff1a;链表的回文结…

6.Java 修饰符

修饰符 &#xff08;访问修饰符、非访问修饰符&#xff09; 访问控制修饰符 Java中&#xff0c;可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 default (即默认&#xff0c;什么也不写&#xff09;: 在同一包内可见&#xff…

前端|CSS(二)| pink老师

参考视频&#xff1a;黑马程序员前端CSS3基础教程&#xff0c;前端必备基础 目录 &#x1f4da;CSS 布局的三种机制 &#x1f407;普通流 &#x1f407;浮动 ⭐️浮动介绍 ⭐️浮动(float)的应用 ⭐️浮动(float)的扩展 ⭐️清除浮动 &#x1f407;定位 ⭐️定位 ⭐️…

检测到目标Referrer-Policy响应头缺失

详细描述 Web 服务器对于 HTTP 请求的响应头中缺少 Referrer-Policy&#xff0c;这将导致浏览器提供的安全特性失效。 当用户在浏览器上点击一个链接时&#xff0c;会产生一个 HTTP 请求&#xff0c;用于获取新的页面内容&#xff0c;而在该请求的报头中&#xff0c;会包含一个…