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.hqwc.cn/news/696695.html

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

相关文章

STM32(GPIO)

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

企业员工出行如何轻松搞定行程变更?

对于业务部门而言&#xff0c;由于工作中需要不时地面临紧急和重要的任务&#xff0c;行程变更已经成为了常态&#xff0c;往往牵一发而动全身。 过去&#xff0c;如果业务量大、行程变更得频繁&#xff0c;员工需要重复提交申请单或多次口头通知。这不仅增加沟通成本&#xff…

山东济南中国姓名学第一人颜廷利:全球知名哲学家思想家

颜廷利教授是一位在全球华人中享有崇高声誉的学者&#xff0c;他的影响力深远而广泛。他的教育和哲学思想在全球范围内产生了深远的影响&#xff0c;因此&#xff0c;宁夏银川口碑最好最靠谱的专业权威著名起名专家大师的师傅颜廷利教授被公认为21世纪影响世界的当代教育家代表…

3.整数运算

系列文章目录 信息的表示和处理 : Information Storage&#xff08;信息存储&#xff09;Integer Representation&#xff08;整数表示&#xff09;Integer Arithmetic&#xff08;整数运算&#xff09;Floating Point&#xff08;浮点数&#xff09; 文章目录 系列文章目录前…

国际护士节庆祝活动向媒体投稿有方法很轻松

作为一名医院职工,我肩负着医院对外信息宣传的重任。在国际护士节这个特殊的日子里,我们医院举办了一系列庆祝活动,以表彰护士们的辛勤付出和无私奉献。然而,在将这些活动信息投稿至媒体的过程中,我最初却遭遇了诸多挑战。 起初,我采用传统的邮箱投稿方式,将精心撰写的稿件发送…

小程序常用组件

小程序常用组件 1.组件的定义2.常用组件3.引入外部字体图标库4.组件样式5.示例代码 1.组件的定义 组件就是指微信定义的具有特殊功能的标签&#xff0c;在wxml中只能使用微信定义的标签。 2.常用组件 <view>&#xff1a;用于页面布局的块级组件&#xff0c;类似于html中的…

基础ArkTS组件:帧动画,内置动画组件,跑马灯组件(HarmonyOS学习第三课【3.6】)

帧动画 帧动画也叫序列帧动画&#xff0c;其原理就是在时间轴的每帧上逐帧绘制不同的内容&#xff0c;使其连续播放而成动画。ArkUI开发框架提供了 ImageAnimator 组件实现帧动画能力&#xff0c;本节笔者介绍一下 ImageAnimator 组件的简单使用。 官方文献 说明 该组件从A…

基于springboot+vue+Mysql的音乐翻唱与分享平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

如何用时尚新姿讲好中国品牌故事?

品牌建设在推动高质量发展中扮演了双重角色&#xff0c;既是高质量发展的重要“承载者”&#xff0c;也是强有力的“助推器”。5月10日-11日&#xff0c;中国时尚品牌URBAN REVIVO&#xff08;以下简称UR&#xff09;以中国品牌日为起点&#xff0c;联合天猫超级品牌日&#xf…

python内置函数exec()和eval()区别

在Python中&#xff0c;eval() 和 exec() 都是内置函数&#xff0c;用于执行存储在字符串或对象中的Python代码&#xff0c;但它们之间也有一些区别。 eval() 语法&#xff1a;eval(expression, globalsNone, localsNone) expression&#xff1a;需要求值的字符串表达式。可…

ohmyzsh的安装过程中失败拒绝连接问题的解决

1.打开官网Oh My Zsh - a delightful & open source framework for Zsh 在官网能看到下面的界面 有这两种自动安装的方式 个人本次选择的是: wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O - 1.打开终端输入安装的指令 sh -c "$(wget…

【C++】继承与多态的一些练习题

学习完了继承与多态&#xff0c;当然要来点练习题啦~ 第一题&#xff1a; class Base1 { public: int _b1; }; class Base2 { public: int _b2; }; class Derive : public Base1, public Base2 { public: int _d; }; int main(){ Derive d; Base1* p1 &d; Base2* p2…