栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第2章SpringBoot入门开发

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第2章SpringBoot入门开发

第2章SpringBoot入门开发
技术点要求:
  • 熟练Spring框架的使用
  • 熟练Maven依赖项目与项目构建
  • 熟练使用Eclipse或IDEA(我的学习都是以IDEA讲解的所有,基本步骤跟着我走是没错的!)
2.1 环境要求

jdk1.8(SpringBoot推荐jdk1.8以上):java version “1.8_0151”
Maven 3.x(Maven3.2以上版本):Apache Maven 3.39
Intellij IDEAIntelliJ IDEA 2021.2.1 x64
SpringBoot 使用当前最新稳定版本:第五章web开发前2.0.6RELEASE

  • 如下截图中spring.io官网有说明,访问页面的官网
  • 如下为翻译官网后的截图说明:
2.2 修改Maven配置文件

如果没有maven压缩包可在Maven该连接下自行下载mac与Wind都是下载这个就可以
下载后需要编辑Maven的配置文件,在解压后的修改该目录下的apache-maven-3.8.3/conf/settings.xml,settings.xml文件该文件默认Maven库是apache的库,所以需要修改文件中的某项依赖库。

  • 简单的介绍一下settings.xml文件中的元素有如下结构组成,这些都是settings文件自带的组成部分

    
    
      
      
      
      
      
      
      
       
       
      
    
    
  • 如下为相信说明每个元素结构的作用

    • localRepository
      • 作用:该值表示构建系统本地仓库的路径。
        ​ 其默认值:~/.m2/repository。

        ${user.home}/.m2/repository
        
    • interactiveMode
      • ​ 作用:表示maven是否需要和用户交互以获得输入。
        ​ 如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。

        true
        
    • offline
      • 作用:这个属性表示在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息。如果构建系统需要在离线模式下运行,则为true,默认为false。当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。

        false
        
    • pluginGroups
      • 作用:当插件的组织id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织Id(groupId)。当我们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表。默认情况下该列表包 含了org.apache.maven.plugins和org.codehaus.mojo。

        
          ...
          
            
            org.codehaus.mojo
          
          ...
        
        
    • proxies
      • ​ 作用:用来配置不同的代理。

        
          ...
          
            
            
              
              myproxy
              
              true
              
              http
              
              proxy.somewhere.com
              
              8080
              
              proxyuser
              
              somepassword
              
              *.google.com|ibiblio.org
            
          
          ...
        
        
    • servers
      • 作用:仓库的下载和部署是在pom.xml文件中的repositories 和 distributionManagement元素中定义的。然而,一般类似用户名、密码(有些仓库访问是需要安全认证的)等信息不应该在pom.xml文件中配置,这些信息可以配置在 settings.xml 中。

        	
        
          
          
            
            server001
            
            my_login
            
            my_password
            
            ${usr.home}/.ssh/id_dsa
            
            some_passphrase
            
            664
            
            775
          
        
        
    • mirrors
      • 作用:用于定义一系列的远程仓库的镜像。我们可以在pom中定义一个下载工件的时候所使用的远程仓库。但是有时候这 个远程仓库会比较忙,所以这个时候人们就想着给它创建镜像以缓解远程仓库的压力,也就是说会把对远程仓库的请求转换到对其镜像地址的请求。每个远程仓库都会有一个id,这样我们就可以创建自己的mirror来关联到该仓库,那么以后需要从远程仓库下载工件的时候Maven就可以从我们定义好的mirror站点来下载,这可以很好的缓解我们远程仓库的压力。在我们定义的mirror中每个远程仓库都只能有一个mirror与它关联,也就是说你不能同时配置多个mirror的mirrorOf指向同一 repositoryId。
        
          
          
            
            mirrorId
            
            PlanetMirror Australia
            
            http://downloads.planetmirror.com/pub/maven2
            
            repositoryId
          
        
        
    • profiles
      • 作用:根据环境参数来调整构建配置的列表。settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。它包含 了 id、activation、repositories、pluginRepositories和 properties元素。这里的profile元素只包含这五个子元素是因为这里只 关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings.xml中的 profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile。
        
          ...
          
            
              
              test
              
              
              
              
              
              
              
              
            
          
          ...
        
        
    • activeProfiles
      • 作用:手动激活profiles的列表,按照profile被应用的顺序定义activeProfile。该元素包含了一组activeProfile元素,每个 activeProfile都含有一个profile id。任何在activeProfile中定义的profile id,不论环境设置如何,其对应的 profile都会被激活。如果没有匹配的profile,则什么都不会发生。例如,env-test是一个activeProfile,则在pom.xml(或者profile.xml)中对应id的profile会被激活。如果运行过程中找不到这样一个profile,Maven则会像往常一样运行。
        
          ...
          
            
            env-test
          
          ...
        
        
    • usePluginRegistry
      • 作用:maven是否需要使用plugin-registry.xml文件来管理插件版本。
        ​如果需要让maven使用文件~/.m2/plugin-registry.xml来管理插件版本,则设为true。默认为false。
        false
        
  • 以下为修改依赖项库的位置将依赖项复制粘贴到该位置

    • 为什么修改依赖项呢,因为默认是阿帕奇的依赖官网可能有的时候网络不好导致依赖导入错误为了避免不必要的麻烦所以将此依赖项改为阿里云的依赖国内的网速要快!
           
          	
          
             alimaven
          
             aliyun maven
          
             http://maven.aliyun.com/nexus/content/groups/public/
          
             central    
          
            
         
      
            
             
            spring plugins  
          
              
              spring plugins  
              
          
              
                
                spring plugins  
                Spring plugins  
                https://maven.aliyun.com/repository/spring-plugin  
                default  
                always  
                
              
            
            
      
2.3 使用IDEA配置Maven的环境
  1. 打开IDEA在该界面下点击Customize

  2. 点击后在该界面下选择All settings…

  3. 而后在设置页面下选择Build,Execution,Deployment / Build Tools / Maven则会出现Maven的设置配置页面

  4. 在该界面中选择Maven home path: 最右边的 … 来选择当前你的Maven解压文件夹位置

  5. 而后在设置Maven页面中会出现如果字样代表配置了本地Maven成功,而后要配置,Maven的配置文件,选中Override后则选择左边的文件夹图标,进入到apache-maven-3.8.3目录中,进入到conf文件夹目录,选中settings.xml文件点击OK


2.4 快速构建SpringBoot项目
  • 需求:浏览器发送/hello请求,服务器接受请求并处理,相应Hello World字符串

  • 分析:构建Spring Boot项目,事实上建立的就是一个Maven项目

2.4.1 创建Maven项目
  • 在IDEA上建一个空的jar类型的maven工程

    1. 首先点击New Project新建一个空的maven工程
    2. 而后在该界面下首先选择 Project SDK 中java版本而后,点击左侧的 maven 而后选择 Next 下一步
    3. 进入下一步以后,首先在Name:中填写项目名称,而后在Location:中选择项目保存的路径,在将Groupld:中填写公司的域名目录的结构,而后ArtifactId:名与Name:名一致,Version:中是填写版本号。
2.4.2 修改pom.xml
  • 在pom.xml中添加SpringBoot相关的父级依赖,spring-boot-starter-parent是一个特殊的starter依赖项,它提供了有用的maven默认值,以及还提供了一个dependency-management部分,以便我们可以省略version与blessed依赖项的标签,当该依赖项添加后无任何依赖项文件只有默认的依赖项标签值,看后面截图就会懂了(这里可以观看官方文档)


  • 在刚刚父级依赖项下,添加依赖标签可以管理项目中需要引入的其他依赖项,而后在添加spring-boot-starter-web依赖项该依赖项必须要用标签包裹起来才能使用,该标签不需要添加版本号因为标签中的父级标签已经有了默认版本号,下载该标签依赖项后会出现许多额外的依赖文件,其中包括Tomcat Web服务器与SpringBoot本身文件。(这里可以观看官方文档)。


    • 附源码:
      
      
          4.0.0
      
          com.dgtt
          demo
          1.0-SNAPSHOT
      
          
              8
              8
          
      
          
              
              org.springframework.boot
              spring-boot-starter-parent
              2.5.5
          
      
      
          
          
              
                  org.springframework.boot
                  spring-boot-starter-web
              
          
      
      
      
      
2.4.3 创建控制器Controller
  • 在java目录中添加自己喜欢的目录结构如果不知如何添加目录结构则自行百度或者,(点击这里)一般java目录下的目录结构都是以网址的命名反写,根据自己喜欢网址反写到java目录结构中。

  • 而后创建controller控制器目录在该目录下创建HelloController控制器类,

  • 在HelloController控制器类中添加如下注解@Controller @ResponseBody @RequestMapping("/hello")在添加hello()函数

    • @Controller注解应用于类上,而不是函数上要牢记

    • @ResponseBody注解应用于函数,该注解可以返回字符串数据,如果不加则返回对应的静态页面的地址,与@RequestMapping()可以暂时理解为是一组标签

    • @RequestMapping("请求名")该注解应用于函数,该注解括号中的参数是请求的路径名

    • 注意:hello()函数名应与@RequestMapper("请求名")中的请求名是一致如下图,一致只是要一种习惯便与后面区分出来请求的函数是哪个!

      • 附源码:
        package com.dgtt.controller;
        
        
        import com.dgtt.HelloMainApplication;
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
        import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.ResponseBody;
        import org.springframework.web.bind.annotation.RestController;
        
        
        @Controller
        public class HelloController {
             
             @ResponseBody
             @RequestMapping("/hello")
             public String hello() {
                  return "hello World";
             }
        }
        
        
2.4.4 创建一个引导类
  • 在controller目录的上级目录下创建一个HelloMainApplication项目的启动入口类,而后在类之上添加@SpringBootApplication注解,该注解作用是标示一个引导类,主方法,整个程序运行需要从当前注解下运行,而后在该类中添加main(String[] args) 而后在该main函数中添加一下Spring的静态函数方法 SpringApplication.run(HelloMainApplication.class,args);来启动项目
    • 附源码:

      package com.dgtt;
      
      import com.sun.glass.ui.Application;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.context.ApplicationContext;
      
      
      @SpringBootApplication //遵循规范使用SpringBootApplication注解
      public class HelloMainApplication {
      
           public static void main(String[] args){
           SpringApplication.run(HelloMainApplication.class,args);
           }
      }
      
      
2.4.5 运行效果
  • 添加完截图中需要的注解和函数后,则需要点击左边那个类似于播放按钮的那个三角形,而后运行,看截图效果。

  • 而在输出的日志信息中可以找找,我们可以找到我们要访问的网址的端口号

  • 而后我们可以使用本机ip就是127.0.0.1或者localhost外加端口号,就是刚刚项目运行时我们看到的日志信息中出现的两条日志当中告诉我们的端口号是8080,结合起来就是127.0.0.1:8080/以及请求的路径,就是HelloController中的@RequestMapping("/hello")该注解中的hello就是我们的请求路径,在结合起来就是127.0.0.1:8080/hello,看效果。

  • 附加学习项(点击这里看官方文档说明)自己查看官网自己测试一下运行效果是一样的!

    • @EnableAutoConfiguration 用于标示一个引导类,主方法,整个程序运行需要从当前注解下运行!Java 约定的标准方法。我们的主要方法SpringApplication通过调用委托给Spring Boot 的类run

    • @RestController 注解告诉Spring得到的字符串直接返回给调用者也就是用户所看到的页面信息,同时也标注了这是一个控制器层,要注意的是@RestController是标注在类之上的。

    • 官方解释:

      • @EnableAutoConfiguration。这个注解告诉 Spring Boot 根据你添加的 jar 依赖“猜测”你想如何配置 Spring。由于spring-boot-starter-web添加了 Tomcat 和 Spring MVC,自动配置假定您正在开发 Web 应用程序并相应地设置 Spring。

        启动器和自动配置
        自动配置旨在与“Starters”配合使用,但这两个概念并没有直接联系。您可以自由选择 starters 之外的 jar 依赖项。Spring Boot 仍然尽最大努力自动配置您的应用程序。
        
      • @RestController注解告诉Spring使得到的字符串直接返回给调用者

2.4.6 简单的部署
  • 创建一个可执行的jar在IDEA中添加如下配置:

  •  
         
             
                 org.springframework.boot
                 spring-boot-maven-plugin
             
         
     
    



  • 官网文档说明文件链接点击这里即可

2.5 SpringBoot项目底层原理 2.5.1 POM.xml文件
  • spring-boot-starter-parent当前项目的父级依赖

  • spring-boot-starter-parent依赖项可以帮我们省去引入依赖时填写version标签去定义版本,我们可以按住Ctrl然后点击spring-boot-starter-parent。

  • 将会进入到,spring-boot-starter-parent-2.5.5.pom文件中,你会看到和parent这个标签中,还有一个spring-boot-dependencies父级依赖项,证明spring-boot-starter-parent依赖项的父级依赖项是spring-boot-dependencies依赖,而该父级依赖项下,还管理了springboot项目中的所有依赖版本

  • spring-boot-starter-web

  • spring-boot-starter: SpringBoot场景启动器(可以理解为运行的场景是什么场景),SpringBoot将所有的功能场景抽取出来,做成一个个的starters(场景启动器),只需项目里引入相关场景的starter就行了,如下列截图中的spring-boot-starter-web,这个启动器当中都有哪些依赖的其他启动器呢,wind电脑按住Ctrl点击截图中依赖的链接。

  • 点击后,你将会看到spring-boot-starter-web依赖项当前还依赖了,spring-boot-starter,spring-boot-starter-json,spring-boot-starter-tomcat,spring-web,spring-webmvc,这几个依赖,我们单单引入这一个spring-boot-starter-web这一个依赖项,就能构建web项目,比如tomcat,springmvc因为该依赖项下还附带了,这几个依赖。

  • 当我们需要什么场景启动器时,就引入什么场景启动器的依赖,就等于你在一个地方早上下午特别热,你就穿短袖,晚上特别冷,那你就晚上穿大棉袄,等于是什么场景你就用什么场景启动器,这里附带官方文档点击这里,里面有各种各样的场景启动器说明,你需要什么就复制什么场景启动器,然后粘贴引入到 依赖标签中。

2.5.2 引导类
  • 通常我们 *Appliaction (代表HelloMainApplication),这个类必须放在所有子包的父包之下,因为当这个类在运行的时候,spring会扫描这个类的所有同级的包与这些同级包之下的子包,然后加载到spring容器中,从而进行使用,如果不是那spring容器中的所有组件将无法使用,这是要特别注意的,如下图HelloMainApplication这个类它就是在dgtt包下,HelloMainApplication这个类同级的包就有controller这个包,所以能被spring扫描加载到容器中进行使用,这里我们底层分析一下@SpringBootApplication这个注解中还有什么作用,按住Ctrl键点击@SrpingBootApplication这个注解。

  • 点击后我们则会看到@SpringBootApplication这个注解中还包含了以下这几个依赖,逐个讲解

    @SpringBootApplication
    	@SpringBootConfiguration
    		@Configuration
    			@Component
    	@EnableAutoConfiguration
    		@AutoConfigurationPackage
    		@import(AutoConfigurationimportSelector.class)
    	@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    
  • @SpringBootApplication
    • 作用:@SpringBootApplication这个注解还还依赖的其它几个注解,你可以理解前两个为配置注解因为都有config这个单词,ComponentScan可以理解为扫描注解,我们在往下分析,这个三个注解下面的注解。
    • @SpringBootConfiguration
      • 作用: @SpringBootConfiguration注解下还依赖了@Configuration注解,可这个注解还依赖了@Component这个注解,可以总结@Configuration这个注解作用是标注一个功能是省去定义配置文件,@Component注解作用是标注一个类表示会被添加到Spring容器中的一个Bean,@SpringBootConfiguration这个注解的功能是可以使用被spring所管理的类和省去配置文件的功能。
      • @Configuration
        • 作用: 它属于spring中的一个注解,定义配置类,等价于配置文件,spring的普通项目配置文件xml文件,这里可以看看看看这篇文章
        • @Component
          • 作用: 标注Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean,也就是说该注解标示的类会被添加到spring容器中进行管理,但是管理的都是Bean。
      @EnableAutoConfiguration
      • 作用:
        @AutoConfigurationPackage
        • 作用: @AutoConfigurationPackage这个注解中有个@import(AutoConfigurationPackages.Registrar.class)注解的类中有个registerBeanDefinitions()函数,而这个函数中有个参数metadata里面加载到了,可以将引导类所在包及其子包下面所有的组件添加到spring容器中




        @import(AutoConfigurationimportSelector.class)
        • 作用:
          1、将所有组件以全类名的方式返回,并且添加到spring容器中
          2、会给容器中导入非常多的自动配置类(都是 *AutoConfiguration),就是导入 并配置好很多当前项目中所有需要的组件,省去我们手动编写配置然后注入到组件中




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/344800.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号