Spring框架概述

目录

1. Spring框架的起源

2. Spring框架的构成

3. Spring的发展历程

4. Spring的开发环境

4.1. Maven安装与配置

(1)Maven的下载与安装

(2)配置Maven的环境变量

(3)本地仓库的配置

(4)镜像仓库的配置

(5)创建Maven项目

(6)Maven项目的结构

(7)Maven项目的配置文件

4.2. Tomca的安装与配置

(1)Tomcat下载与安装

(2)Tomcat的启动

(3)解决中文乱码问题

(4)Tomcat端口的配置

(5)Web应用的配置

4.3.  集成开发环境

(1) IntelliJ IDEA下载和安装

(2)创建Maven Web项目

(3)配置Tomcat服务器

5. 初识Spring框架


      Spring框架是一个开源的Java平台,它通过提供一致的编程和配置模型,解决了企业应用开发中常见的复杂性问题。Spring的核心特性包括依赖注入(Dependency Injection, DI)和面向方面的编程(Aspect-oriented programming, AOP),它们共同提供了一种强大且灵活的方式来管理对象的依赖关系和增强对象的行为。

1. Spring框架的起源

        Spring框架起源于2002年,那时Java EE和EJB正风靡一时,许多大公司都采用这些技术进行项目开发。在当时背景下,Rod Johnson认为EJB过于庞大,不是所有项目都需要这样的重型框架,应有更优的解决方案。为了证明自己的观点,Rod Johnson写了《Expert One-on-One J2EE Development without EJB》一书,书的封面如图2所示。在书中,Rod Johnson介绍了Java企业应用程序开发情况,并指出Java EE和EJB组件框架中的一些主要缺陷,Rod Johnson还提出了一个基于普通的Java类和依赖注入的更简单的解决方案,另外,他还展示了如何在不使用EJB的情况下构建高质量、可扩展性的在线预留座位系统。

图1. Expert One-on-One J2EE Development without EJB

       为构建应用程序,Rod Johnson编写了超过30000行的基础结构代码,项目中的根包命名为com.interface21,这是Spring框架的前身,所以框架最初的名字叫interface21。2003 年 Rod Johnson 和同伴在此框架的基础上开发了一个全新的框架命名为Spring,Rod Johnson认为Spring 是传统J2EE新的开始,随后Spring框架的发展进入快车道。

       Rod Johnson 是一位杰出的软件工程师,他以创立Spring框架而闻名。Rod Johnson 在悉尼大学获得了计算机学和音乐学的双学位,后来还获得了音乐学博士学位。Rod Johnson在软件开发领域有着深远的影响,特别是在Java社区中。2009年,VMware以4.2亿美元收购了Spring Source,2012年,Rod Johnson宣布离开Spring Source,转而成为天使投资人和多家公司的董事,继续在技术和商业领域发挥影响力。

      Spring框架是由目前Pivotal团队维护的,Pivotal是一个提供云和大数据解决方案的公司,其前身是由Rob Mee于1989年创立的咨询公司Pivotal Labs。Pivotal Labs注于快速的互联网式软件开发,即敏捷编程。2012年,EMC公司收购了Pivotal Labs,并将其作为EMC的一个新部门,继续与以前的客户合作。2013年,EMC将Pivotal Labs 的核心业务分拆出去,成立了新的 Pivotal 公司,该公司的股东是 EMC 、 VMware 和通用电气。 Pivotal 公司负责维护的开源产品除了Spring及其衍生产品外,还有我们耳熟能详的Tomcat、Redis、RabbitMQ、Cloud Foundry、Greenplus和GemFire。Pivotal 公司成立之后,于 2014 年发布了 Spring Boot,2015 年发布了 Spring Cloud,2018 年 Pivotal 公司在纽约上市。

2. Spring框架的构成

       Spring框架由大约20个模块组成,这些模块按照功能可分为: 核心容器(Core Container)、面向方面编程(AOP和Aspects)、设备支持(Instrumentation)、数据访问及集成(Data Access/Integration)、报文发送(Message)Web和测试(Test),如图2所示。Spring框架中的各个模块可以独立使用,也可以几个模块进行组合。

图2. Spring框架的构成

(1)核心容器(Core Container)

     核心容器是由spring-beans、spring-core、spring-contextspring-expression(Spring Expression Language, SpEL)四个模块构成,提供Spring框架的基本功能。

      spring-beans和spring-core是Spring框架的核心模块,它提供了控制反转(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)。BeanFactory接口是Spring框架中的核心接口,是工厂模式的实现。 BeanFactory使用IoC模式将应用程序的配置和依赖性规范与实际的应用程序代码进行了分离。

       spring-context位于核心模块之上,它扩展了BeanFactory,为其添加了Bean生命周期控制、框架事件体系以及资源加载透明化等功能。此外,它还提供了许多企业级的支持,例如,邮件访问、远程访问、任务调度等。

       spring-expression是统一表达式语言(EL)的扩展模块,它可以查询和管理运行中的对象,同时也可以方便地调用对象的方法,操作数组和集合等。

(2)面向方面编程(AOP、Aspects)

       Spring框架提供了面向方面的编程(AOP)能力,可以实现一些面向对象编程无法很好实现的功能,例如,将日志、事务与具体的业务逻辑解耦。AOP模块包含spring-aop、spring-aspects模块。 spring-aop是实现面向方面编程的核心模块。 spring-aspects模块集成自Aspect框架,主要为面向方面编程提供多种实现方法。

(3)仪器化支持(Instrumentation

       spring-instrument模块主要用于提供类的仪器化和类加载器的实现。类的仪器化允许Spring或其他框架在运行时修改类的字节码。spring-instrument模块提供了一个 Java 代理的实现,可以用来在加载时动态地仪器化类。这对于实现面向切面编程(AOP)等功能非常有用,可以动态地添加或改变应用程序的行为,而无需修改源代码。

(4)数据访问及集成(Data Access/Integration)

      Spring自带了一组数据访问框架,集成了多种数据访问技术。例如,JDBC、MyBatis、Hibernate、Java Persistence API(JPA)等。

      数据访问及集成模块包括:spring-jdbc、spring-tx、spring-orm、spring-jmsspring-oxm。spring-jdbc提供了JDBC访问支持,spring-tx实现事务控制, spring-orm提供了对象-关系映射的支持, spring-jms提供了消息的发送和接收功能, spring-oxm提供了从对象到XML映射的支持。

(5)Web

       spring-web模块由spring-web、spring-webmvc、spring-websocketspring-webflux构成,它为Web应用程序的开发提供支撑。

      spring-web模块为spring提供了最基础的Web支持,其通过Servlet或者Listeners来初始化IoC容器。spring-web模块实现了Spring MVCspring-websocket实现与Web前端的全双工通信协议。spring-webflux是一个新的非阻塞函数式Reactive Web框架,可以用来建立异步、非阻塞、事件驱动的服务。

(6)报文发送(Message)

       spring-message模块是从Spring 4开始加入的一个模块,专门用于处理国际化和本地化的消息和文本。这个模块提供了一种灵活的方式来定义和管理应用中的消息,使得支持多语言环境变得更加简单。

(7)测试(Test)

      spring-test模块主要用于提供支持和增强在 Spring 应用程序上进行单元测试和集成测试的功能。这个模块通过提供一系列的实用工具和注解来简化测试过程,使得开发者能够更加高效地编写和执行测试用例。

3. Spring的发展历程

      Spring自2002年由Rod Johnson提出概念以来,经历了多个重要的发展阶段,逐渐成为Java开发中最受欢迎的框架之一。Spring框架的主要发展历程如下:

  • 2003年Spring框架首次公开发布,版本为0.9。这个版本包括了核心容器、依赖注入、面向切面编程等基础功能。
  • 2004年发布Spring 1.0正式版,随后不久推出1.2版本,增加了对MVC框架的支持。
  • 2006年Spring 2.0发布,引入了基于XML的配置元数据支持和简化的XML命名空间。
  • 2007年:Spring 2.5发布,改进了对注解驱动开发的支持,引入了Spring Web Flow。
  • 2009年Spring 3.0发布,增加了对Java 5以上版本的支持,引入了注解驱动的开发和Java EE 6的支持。
  • 2013年Spring 4.0发布,全面支持Java 8,增强了对WebSocket和REST APIs的支持。
  • 2014年Spring Boot 1.0发布,目的是简化新Spring应用的引导和开发过程。Spring Boot提供了大量自动配置的功能,极大地简化了项目配置和依赖管理。
  • 2015年Spring Cloud项目启动,旨在提供在云平台上构建和部署微服务的工具和支持
  • 2017年Spring 5.0发布,引入了反应式编程模型,支持响应式APIs,增强了在异步和事件驱动环境下的性能。
  • 2019年Spring Boot 2.2发布,进一步增强了对微服务架构和云原生应用的支持
  • 2021年Spring Boot 2.5发布,持续优化和扩展功能,提升开发体验和性能。
  • 2022年:Spring 6.0发布,该版本基于 Java 17+,与最新的 Java EE 标准保持一致,提供了更好的兼容性和扩展性。

      Spring框架的发展不仅跟随了技术潮流,如从单体应用到微服务架构的转变,还积极引入新技术,如响应式编程和云原生支持,保持了其在Java开发社区中的领导地位。通过不断的迭代和改进,Spring使得Java开发更加高效、简洁和强大。在这个过程中,Spring生态系统也不断壮大。许多基于Spring的项目如Spring Security、Spring Data、Spring Cloud等都成为了Java开发中不可或缺的一部分。Spring框架的不断发展和完善,使其能够持续满足企业级Java应用开发的需求,并保持在技术创新的前沿。

4. Spring的开发环境

      Spring框架是采用Java语言开发,spring 5.0对Java要求的最低版本是Java 8。关于Java运行环境的安装与配置请阅读文章:开发Java应用程序,在此不做赘述。下面介绍项目管理工具Maven、Web服务器Tomcat以及Java集成开发环境(IDE)的安装与配置。

4.1. Maven安装与配置

       Maven是跨平台的项目管理工具,主要服务于Java平台的项目构建、依赖管理、项目信息管理。MavenApache下的一个开源项目,它包含了对象模型、标准集合、项目生命周期、依赖管理系统和用来运行定义在生命周期阶段的插件目标的逻辑。

(1)Maven的下载与安装

       打开Maven官方下载网址(https://maven.apache.org/download.cgi), 选择下载二进制归档zip文件(Binary zip archive):apache-maven-3.9.6-bin.zip,如图3所示。

图3. Maven的下载页面

       将下载的apache-maven-3.9.6-bin.zip文件解压缩到无中文和空格的路径下,这里选择D:\apache-maven-3.9.6,解压缩后的目录结构如图4所示。

图4. Maven的目录结构

(2)配置Maven的环境变量

       首先新建环境变量MAVEN_HOME,将其值设置为: D:\apache-maven-3.9.6,然后,编辑环境变量Path,将%MAVEN_HOME%\bin加入到Path中。

图5. MAVEN环境变量的定义

       在命令行方式下输入mvn-version命令,检测maven是否安装成功,如果输出下图的内容,则说明Maven安装成功。

(3)本地仓库的配置

       配置完Maven的环境变量之后,还需要修改本地Maven仓库的地址。Maven从远程仓库下载依赖包会存储在本地仓库中。需要手动修改配置文件setting.xml来配置本地仓库的地址,setting.xml文件位于Maven安装目录的conf文件夹下,例如,在面向的实例中,该文件位于D:\apache-maven-3.9.6\conf目录中。

打开settings.xml文件,看到文件的第53行内容,将53行复制并粘贴到55行,如下图所示。

       将localRepository标签内容换成自己的本地仓库地址。Maven推荐本地仓库地址设置为 :${user.home}/.m2/repository(见52行),其中,user.home为用户的主目录。例如,在Windows系统下,user.home的目录为C:\Users\fcmeng,则Maven的本地仓库地址为:C:\Users\fcmeng\.m2\repository,如下图所示。

      如果用户机器的C盘的空间有限,也可以将Maven的本地仓库地址改为其它地址。

(4)镜像仓库的配置

       Maven默认的官方镜像仓库是海外的,在国内下载速度非常慢,推荐使用阿里云提供的Maven镜像仓库,这样可以加快依赖包的下载速度和稳定性。

       可以添加阿里云的镜像到setting.xml文件中。首先,在setting.xml文件中找到mirrors节点,在其下添加mirror子节点,节点信息如下:

<mirror>

       <id>alimaven</id>

       <mirrorOf>center</mirrorOf>

       <name>aliyun maven</name>

       <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

    </mirror>

添加上述子节点后的setting.xml文件内容如下:

(5)创建Maven项目

       利用maven内置插件Archetype的generate任务可以创建一个Java项目骨架。命令如下:

          mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}  -         

                                  DarchetypeArtifactId={ArchetypeId} -DinteractiveMode=false

      其中,

  • archetype是插件名称, generate是插件的一个任务,一个插件可以有很多任务,这里仅是产生骨架任务;
  • -DgrounpId:组织标识(包名);
  • -DartifactId:项目名称;
  • -DarchetypeArtifactId:指定ArchetypeId,即骨架类型;
  • -DinteractiveMode:是否使用交互模式。

     常用的项目骨架:

  • maven-archetype-quickstart创建Java一般项目
  • maven-archetype-webapp:创建Java Web项目

     集成开发环境中创建Maven项目也是调用maven内置插件Archetype来完成的。

(6)Maven项目的结构

       Maven项目有约定的目录结构,每个目录都有自己的含义,如图6所示。

图6. Maven项目的结构

(7)Maven项目的配置文件

       pom.xml是Maven项目的核心配置文件。项目本身的描述、项目依赖库、项目构建配置等与构建过程相关的一些设置都在这个文件中进行配置。

       pom的含义是项目对象模型(Project object model),其内容及其含义如图7所示。

图7. pom.xml文件

    可以在maven网站上查找并添加项目依赖的JAR包,Maven网站地址:https://mvnrepository.com/,其首页如下图所示。

图8. Maven网站

4.2. Tomca的安装与配置

       Tomcat是Apache组织的Jakarta项目中的一个重要子项目,它是Sun公司(已被Oracle收购)推荐运行ServletJSP的容器(引擎),其源代码是完全公开的。Tomcat不仅具有Web服务器的基本功能,还提供了数据库连接池等许多通用组件功能。

(1)Tomcat下载与安装

       Tomcat的版本不断更新,我们选择Windows 64位系统下10.1.23版的二进制归档文件:apache-tomcat-10.1.23-windows-x64.zip,

下载地址为:https://tomcat.apache.org/download-10.cgi,如图9所示。

图9. Tomcat的下载页面

       将下载的zip文件戒烟所的安装目录,这里为D:\tomcat\apache-tomcat-10.1.23,解压缩后的目录结构如下图所示。

图10. Tomcat的目录结构

各个目录的含义如下:

  • bin用于存放Tomcat的可执行文件和脚本文件。
  • conf:用于存放Tomcat的各种配置文件,如web.xmlserver.xml
  • lib:用于存放Tomcat服务器和所有Web应用程序需要访问的JAR文件。
  • logs:用于存放Tomcat的日志文件。
  • temp:用于存放Tomcat运行时产生的临时文件。
  • webapps:Web应用程序的主要发布目录,通常要将发布的应用程序放到这个目录下。
  • work:Tomcat的工作目录,JSP编译生成的Servlet源文件和字节码文件放到这个目录下。

(2)Tomcat的启动

        进图Tomcat安装目录的bin文件夹下,用鼠标双击startup.bat文件,便会启动Tomcat服务器,此时可以在命令行看到一些启动信息,如图11所示。

图11. Tomcat启动界面

       在启动Tomcat的过程,可能会遇到一种情况,即双击bin目录中的startup.bat脚本文件时,命令行窗口一闪而过。这时可以进入命令窗口,在该窗口执行startup.bat命令,就会看到错误信息显示在该窗口中。出现上述情况的主要问题可能是JAVA_HOME环境变量配置不正确。这是因为Tomcat服务器是由Java语言开发的,它在运行时需要根据JAVA_HOME环境变量来获取JRE的安装位置,从而利用Java虚拟机来运行Tomcat。要解决这个问题只需将JAVA_HOME环境变量配置成JDK的安装目录。

      Tomcat启动后,在浏览器的地址栏中输入http://localhost:8080或者http://127.0.0.1:8080,访问Tomcat服务器,如果浏览器中出现如图12显示的界面,则说明Tomcat服务器安装成功。

图12. Tomcat启动首页

(3)解决中文乱码问题

      Tomcat产生中文乱码的主要原因是编码与解码的方式不一致,可以通过如下方式解决。

  •  打开tomcat的/conf/server.xml,在Connerctor标签下给它增加UTF-8编码方式(第74行):

  • 打开tomcat的\conf\logging.properties,将日志的编码格式由UTF-8改为GBK(第51行):

(4)Tomcat端口的配置

       8080Tomcat服务器默认占用的端口,可以通过修改Tomcat服务器安装目录中conf文件夹下的主配置文件server.xml来更改端口号。打开server.xml文件,找到如下内容:

       将其中的port=“8080”更改为新的端口号,并重新启动Tomcat服务器即可,例如,将8080更改为9090等。

       如果Tomcat服务器所在的计算机没有启动占用80端口的其他网络程序,也可以将Tomcat服务器的端口设置为80,这样用户在访问Tomcat服务器时可以省略端口号,例如,http://localhost/

(5)Web应用的配置

       在Web服务器上运行的Web资源都是以Web应用形式呈现的,所谓Web应用就是多个Web资源的集合,Web应用通常也称为Web应用程序或Web工程。一个Web应用由多个Web资源或其他文件组成,其中包括HTML文件、CSS文件、JS文件、动态Web页面、Java程序、支持JAR包、配置文件等。开发人员在开发Web应用时,应按照一定的目录结构来存放这些文件,否则,在把Web应用交给Web服务器管理时,不仅可能会使Web应用无法访问,还会导致Web服务器启动报错。

       Tomcat服务器安装目录的webapps目录下的任何一个子目录都可以作为一个Web应用目录。例如,在webapps下新建myweb子目录,那么myweb就成为一个Web应用目录,如果将web1.html保存到myweb中,那么在浏览器中输入:http://localhost:8080/myweb/web1.html,就可以访问web1.html页面。

     在Tomcat中部署Web应用主要有四种方式:

  • 方式一:将web项目打包为WAR文件后拷贝到webapps目录中;
  • 方式二:将Web应用文件夹复制到Tomcat安装目录下的webapps文件夹中;
  • 方式三:打开Tomcat安装路径下的conf文件夹下的server.xml文件,在<Host></Host>元素中添加<Context>元素,例如,要配置D:\myWeb文件夹下的Web应用myweb1可以使用以下代码:<Context path=“/” docBase=“D:/myWeb/myweb1” reloadable=“true” >。
  • 方式四:在conf\Catalina\localhost目录下添加xml配置文件,任意命名只要和当前文件夹中的文件名不重复即可。

4.3.  集成开发环境

      目前,业界最常用的Java IDE工具是Eclipse和IntelliJ IDEA。Eclipse是开源免费的,IntelliJ IDEA提供了两个版本:旗舰版(Ultimate)和社区版(Community),其中,Ultimate是商业收费的,Community是免费的。对于在校的教师和学生,可以申请免费的IntelliJ IDEA Ultimate版本作为教学和学习使用。在这里,我们介绍如何利用IntelliJ IDEA Community创建和管理Maven项目。

(1) IntelliJ IDEA下载和安装

      IntelliJ IDEA的下载网址是:https://www.jetbrains.com/idea/download,我们选择IntelliJ IDEA Community Edition进行安装文件的下载,如图13所示。

图13. IntelliJ IDEA 下载页面

      下载完成后单击安装文件进行安装,安装结束后需要重启计算机。IntelliJ IDEA的启动界面如图14所示,默认的是黑色主题“Darclus”,在“Customize”选项中可以修改颜色主题。

 图14. IntelliJ IDEA的启动界面

(2)创建Maven Web项目

      点击启动界面中“New Project”按钮,进入创建项目界面,如图15所示,我们选择“Maven Archetypr”选项创建Maven项目。项目的名称为“mywebapp”,项目的位置是“E:\idea-workspace”目录,IDEA能够检测到机器安装的JDK,本机安装的JDK版本是20.0.2,在Archetype下拉列表中选择Maven项目的类型,在这里,我们选择“maven-archetype-webapp”,版本为1.0,点击“create”按钮开始创建Maven Web项目。由于需要从远程Maven仓库下载文件,所以创建过程会花费一段时间,请耐心等待!

图15. 创建项目界面

自动生成的项目结构如图16所示。

图16. Maven Web项目结构

     选择“File | Settings”菜单,进入Setting是界面,如图17所示,点击左侧树结构中的“Build, Excution, Deployent | Build Tools | Maven”节点,右侧显示Maven的配置信息。在Maven home path的下拉列表中,除了IDEA内置的Maven外,还检测到了用户安装的Maven。在这里,我们选择IDEA内置的Maven。

图17. Maven设置界面

(3)配置Tomcat服务器

     IDEA Community版本没有内置的Tomcat服务器插件,需要安装相应的插件。在Setting界面中点击左侧“Plugins”节点,进入插件安装界面,如图18所示,在查询栏中输入“tomcat”,选择Smart Tomcat进行安装。

      选择“Run | Edit Configurations”菜单,进入Run/Debug Configurations界面,点击“+”按钮,选择Smart Tomcat选项配置Tomcat,如图18所示,在Tomcat server的下拉列表中选择已安装的Tomcat的目录,在Catalina base中配置在Maven Web项目所使用的Tomcat的存放地址,在Deployment directory中配置Maven Web项目的Web应用目录,点击“OK”按钮保存Tomcat配置。

图18. 配置Tomcat

       启动Tomcat服务器,在浏览器中输入:http://localhost:8080/mywebapp,显示如下图所示界面,这说明Tomcat服务器配置成功。

图19. Maven Web项目默认首页

5. 初识Spring框架

      在pom.xml文件中增加如下依赖,然后,在项目上右击,在弹出的快捷菜单中选择Maven |Reload project命令更新项目

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-beans</artifactId>

    <version>5.2.25.RELEASE</version>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context</artifactId>

    <version>5.2.25.RELEASE</version>

</dependency>

       项目更新后,增加了如下了一些Spring依赖包。

在项目中创建包com.my,在包com.my下创建类Hello和Main,定义如下:

package com.my;
import org.springframework.stereotype.Component;@Component
public class Hello {public void print(){System.out.println("Hello World!");}
}
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan("com.my")
public class Main {public static void main(String[] args){AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(Main.class);Hello hello=context.getBean(Hello.class);hello.print();}
}

运行类Main,在控制台中输出如下信息:

Hello World!

代码说明:

  • 使用注解@Component声明的类是由Spring Ioc容器管理的一个Bean。
  • 使用注解@Configuration声明的类是Spring框架中的一个配置类。
  • 注解@ComponentScan("com.my")表示Spring框架自动扫描com.my包及其子包下所有使用注解@Service@Component@Repository@Controller的声明的类,并将其注册为Bean
  • AnnotationConigApplicationContext是Spring 框架中的一个类,用于基于 Java 注解的配置来启动 Spring 容器。该类是接口ApplicationContext的一个实现类,它允许从一个或多个基于 Java 的配置类中加载Spring应用上下文。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WIFI模块的AT指令联网数据交互--第十天

1.1.蓝牙&#xff0c;ESP-01s&#xff0c;Zigbee, NB-Iot等通信模块都是基于AT指令的设计 初始配置和验证 ESP-01s出厂波特率正常是115200, 注意&#xff1a;AT指令&#xff0c;控制类都要加回车&#xff0c;数据传输时不加回车 1.2.上电后&#xff0c;通过串口输出一串系统…

如何使用dockerfile文件将项目打包成镜像

要根据Dockerfile文件来打包一个Docker镜像&#xff0c;你需要遵循以下步骤。这里假设你已经安装了Docker环境。 1. 准备Dockerfile 确保你的Dockerfile文件已经准备就绪&#xff0c;并且位于你希望构建上下文的目录中。Dockerfile是一个文本文件&#xff0c;包含了用户可以调…

绘制一个单级放大电路原理图过程,保姆级教程

新手在学习pads的使用最好最快的方法就是实际上手去画原理图&#xff0c;画PCB图&#xff0c;在这个过程中&#xff0c;就能够更快速得掌握PADS软件的使用。 本篇就是对于实际画原理图过程的一个记录&#xff0c;手把手教学&#xff0c;如果有纰漏或者有更好的一些技巧&#xf…

thinkphp6使用layui分页组件做分页效果

博主用的是layui2.9.8的版本&#xff0c;但这个版本的分页组件是动态效果的&#xff0c;但我需要的是静态分页&#xff0c;所以我自己封装了一个生成layui的分页代码生成代码。代码如下&#xff1a; 1、先创建文件&#xff0c;路径是extent/layui/LayuiPage.php&#xff0c;加…

R语言:GSEA分析

#安装软件包 > if (!requireNamespace("BiocManager", quietly TRUE)) install.packages("BiocManager") > BiocManager::install("limma") > BiocManager::install("org.Hs.eg.db") > BiocManager::install("…

检测服务器环境,实现快速部署。适用于CRMEB_PRO/多店

运行效果如图&#xff1a; 最近被好多人问&#xff0c;本来运行的好好的&#xff0c;突然swoole就启动不了了。 本工具为爱发电&#xff0c;如果工具正好解决了您的需求。我会很开心 代码如下&#xff1a; """本脚本为爱发电by:网前雨刮器 """…

四川汇昌联信:拼多多网点怎么开?大概需要多少钱?

想要开一家拼多多网点&#xff0c;你肯定很关心需要准备多少资金。下面&#xff0c;我们就来详细解答这个问题&#xff0c;并从多个角度分析开设网点的要点。 一、 开设拼多多网点&#xff0c;首要任务是确定启动资金。根据不同的经营模式和地区差异&#xff0c;成本会有所不同…

基于SpringBoot + Vue的兼职网站管理系统设计与实现+毕业论文+答辩PPT

系统介绍 本系统包含管理员、用户、企业三个角色。 管理员角色&#xff1a;前台首页、个人中心、用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理。 用户角色&#xff1a;前台首页、个人中心、职位申请管理。 企业角色&#xff1a;前台首页、个人中心、…

COMSOL粗略估算计算时间

COMSOL粗略估算模型计算时间 针对反复修改调试的有限元模型&#xff0c;需要大致估算有限元模型的计算时间。经查阅&#xff0c;模型求解的自由度数和求解时间密切相关。 测试条件 测试模型为声-固耦合模型&#xff0c;电脑内存32G&#xff0c;CPU-i7-10700K&#xff0c;核显…

【算法】滑动窗口——最小覆盖子串

本节博客是对“最小覆盖子串”题目由暴力求解到滑动窗口的思路解析&#xff0c;有需要借鉴即可。 目录 1.题目2.滑动窗口解法3.总结 1.题目 题目链接&#xff1a;LINK 这个题目是困难难度&#xff0c;感觉是一个中等题目的感觉。 首先我肯定想到的是暴力求解的方法&#xff…

STM32(GPIO)

GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入模式下可读取端口的高低电…

Java特性之设计模式【享元模式】

一、享元模式 概述 享元模式&#xff08;Flyweight Pattern&#xff09;主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能。这种类型的设计模式属于结构型模式&#xff0c;它提供了减少对象数量从而改善应用所需的对象结构的方式 享元模式尝试重用现有的同类对…

OS复习笔记ch5-4-2

引言 承接上文我们介绍了信号量机制和应用信号量机制实现的进程同步和互斥&#xff0c;这一节我们将围绕一些经典问题对信号量机制展开更深入地探讨。 读者/写者问题 读者/写者问题与我们之前遇到的问题类型不同&#xff0c;它描述的是&#xff1a; 有读者和写者两组进程&am…

C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现

标准库中的string&#xff1a;C初阶学习第六弹——string&#xff08;1&#xff09;——标准库中的string类-CSDN博客 前言&#xff1a; 在前面我们已经学习了如何使用标准库中的string类&#xff0c;但作为一个合格的程序员&#xff0c;我们不仅要会用&#xff0c;还要知道如…

网络库-libevent介绍

1.简介 libevent是一个事件驱动的网络库&#xff0c;主要用于构建可扩展的网络服务器。它提供了跨平台的API&#xff0c;支持多种事件通知机制&#xff0c;如select、poll、epoll、kqueue等。 主要组件 event: 表示一个具体的事件&#xff0c;包括事件类型、事件回调等。eve…

房屋出租管理系统需求分析及功能介绍

房屋租赁管理系统适用于写字楼、办公楼、厂区、园区、商城、公寓等商办商业不动产的租赁管理及租赁营销&#xff1b;提供资产管理&#xff0c;合同管理&#xff0c;租赁管理&#xff0c; 物业管理&#xff0c;门禁管理等一体化的运营管理平台&#xff0c;提高项目方管理运营效率…

如何查看centos7是否安装nginx

要查看 CentOS 7 系统上是否安装了 Nginx&#xff0c;您可以使用多种方法来检查。以下是一些常见的方法&#xff1a; 通过 RPM 包管理器查询 在 CentOS 系统上&#xff0c;可以使用 RPM 包管理器来查询已安装的软件包。要查看是否安装了 Nginx&#xff0c;您可以在终端中运行以…

【C++】学习笔记——继承_1

文章目录 十一、模板进阶5. 模板的优缺点 十二、继承1. 继承的概念及定义2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数 未完待续 十一、模板进阶 5. 模板的优缺点 优点&#xff1a; 模板复用了代码&#xff0c;节省资源&#xff0c;更快的迭代开发&a…

某银行软件测试笔试题,满分一百你能得多少分?

时间90分钟&#xff0c;满分100分&#xff09; 考试要求&#xff1a;计算机相关专业试题 一、填空题&#xff08;每空1分&#xff0c;共10分&#xff09; 1. ______验证___是保证软件正确实现特定功能的一系列活动和过程。 2. 按开发阶段分&#xff0c;软件测试可分为&#x…

SSIM(Structural Similarity),结构相似性及MATLAB实现

参考文献 Wang, Zhou; Bovik, A.C.; Sheikh, H.R.; Simoncelli, E.P. (2004-04-01). “Image quality assessment: from error visibility to structural similarity”. IEEE Transactions on Image Processing. 13 (4): 600–612. Bibcode:2004ITIP…13…600W. CiteSeerX 10.…