(二):Spring Boot入门

Spring Boot入门

1: 介绍

spring boot是基于spring框架搭建起来的服务器应用框架,它嵌入Tomcat, Jetty或者Undertow等服务器,并且不需要传统的WAR文件进行部署。可以把它看成服务器总spring框架的一列整合,省去了我们很多配置等工作。可以帮助我们快速建立一个产品级别的企业级应用。

1.1:原有的spring开发

在原有的spring项目开发中,我们使用spring的组件建立工程后需要进行大量的项目配置,结合maven导入大量的jar包才能让我们的程序启动起来,大量的配置使程序员的工作配置大于开发,这给我们造成了很不好的体验,想要详细了解可以学习spring的开发,学习spring项目的开发并不会让我们重复造车,spring boot是基于spring的这样会使我们更好的理解spring boot。

1.2:现有的spring开发

从spring的全家桶时代,到现在的spring boot(JavaEE一站式解决方案)、spring cloud(分布式整体解决方案),给我们的开发提供了极大的便利,让我们精力都集中在开发上,避免了大量的配置。

1.3:优点

  • 创建独立的spring应用程序
  • 嵌入Tomcat、Jetty、Undertow,无需部署WAR文件
  • 允许通过maven来根据需要获取starter
  • 尽可能的自动给配置spring,简化开发,也可修改默认配置。
  • 提供生产就绪型功能,如指标、健康检查和外部部署
  • 绝对没有代码生成,对xml没有配置要求。

1.4:缺点

spring boot最大的缺点就是入门容易精通难,在后台服务庞大的工程中,虽然spring boot为为我们带来的便利,但同样深层次的服务器问题也难暴露出来给我们处理,这样就造成了我们需要非常精通spring boot并且了解真个服务器的框架才能更好的完成我们的工作。

1.5:大时代背景(微服务)

微服务的概念在2014年被提出,微服务可以理解为一组小型服务的集合,每一个小型服务都运行在自己的进程内,服务与服务之间通过HTTP进行轻量级通信,每个服务都只专注与自己的设计目标,这样让开发更简介,微服务整体对外进行服务,访问通过网关来分析访问的是那个服务来进行分发。spring boot就是微服务的一站式解决方案。

2:Spring Boot HelloWorld

2.1: 创建工程

熟悉maven的和IDE的可以直接在IDE中创建Spring Boot工程,还可以在start.spring.io网站上建立工程后导入IDE。本人用的idea.。
导入后的文件目录

2019-01-17 13-29-53屏幕截图.png

  • resources
    • startic:保存所有静态资源:js,css,jsp
    • templates:用来保存所有的模板页面,
  • application.properties:spring boot项目的配置文件。可以修改项目的默认配置。

2.2:项目介绍

spring boot为我们提供了很多starter,这些starter是一些模块的依赖集合,我们不再需要一个一个jar的手动导入,而只需要导入spring提供的starter就可以将整个我们需要的模块依赖导入进来,
pom.xml



    4.0.0
    
        
        org.springframework.boot
        spring-boot-starter-parent
        2.1.2.RELEASE
         
    
    com.tian.learn
    SpringBoot-Learn
    0.0.1-SNAPSHOT
    SpringBoot-Learn
    Demo project for Spring Boot

    
        1.8
    

    
        
            
            org.springframework.boot
            spring-boot-starter-web
        

        
            
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

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


程序的配置文件
在resource目录下application.properties文件是这个项目的配置文件,在spring boot中绝大多数配置是spring为我们自动配置的默认配置,但我们也可以在这个文件中对默认配置进行修改,例如启动项目的端口号等。现在这个文件什么内容都没有
程序的入口
程序的入口就是Java源代码目录的 xxxApplication.java文件中,xxx一般为你的项目名,

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*该注解标记了该类为spring boot的程序入口类,
*一个spring boot项目该注解只能存在在一个类里
*/
@SpringBootApplication
public class SpringBootLearnApplication {
    /**
    * main函数入口,这里将拉起我们的spring boot项目,里面只有一套语句。
    */
    public static void main(String[] args) {
        SpringApplication.run(SpringBootLearnApplication.class, args);
    }

}

2.3:开发第一HelloWorld

spring boot入门简单就在于它的开发简单,学习起来特别快,在Java源代码目录新建文件HelloWorld.java,创建helloWorld访问。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//注解标注这个类为RestControl,稍后会详细介绍
@RestController
public class HelloWorld {
    //注解标定访问的相对路径。
    @RequestMapping("/helloworld")
    public String hello(){
        return "hello world";
    }
}

2.4:运行

spring boot中默认集成了Tomcat的内容,所以这里我们不再需要发布我们的项目到Tomcat,直接运行即可,也可以将它打包成jar包,使用Java命令执行。
直接运行我们的程序入口main函数
如果没有配置项目就是localhost:8080:我们的相对路径是helloworld,所以浏览器的全路径就是
localhost:8080/helloworld, 查看结果。
使用maven的package命令打包jar
将项目打包成jar后,我们可以直接运行jar,命令:Java -jar 生成的包名

3:项目详解

@SpringBootApplication

spring boot应用标注在某个类上,说明这个类是springboot的主配置类,也是入口类,springboot就可以运行该类的main方法启动SpringBoot应用

//@SpringBootApplication的定义
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
  • 前四个注解都是Java的类注解,不了解的可以重新学习一下Java注解

  • SpringBootConfiguration : SpringBoot的配置类

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Configuration
    public @interface SpringBootConfiguration {
    }
    

    @configuration:原Spring注解,标记配置类,原spring开发有很多配置文件,现在springboot将配置文件都替换为配置类。它也是容器中的一个组件。

  • @EnableAutoConfiguration:开启自动配置功能
    以前我们spring开发配置许多参数,这个注解告诉springboot自动配置默认参数,有这个注解才能使自动配置生效。

    @AutoConfigurationPackage
    @Import({AutoConfigurationImportSelector.class})
    public @interface EnableAutoConfiguration {
    
    • @AutoConfigurationPackage:自动配置包:

      @Import({AutoConfigurationPackages.Registrar.class})
      public @interface AutoConfigurationPackage {
      }
      

      这个import注解是spring的底层注解,给容器导入一个组件Registrar,查看源码可以看到
      这个组件是将我们主配置类(@SpringBootAplication)所在包及所有子包下的所有组件都扫描到spring boot容器中。

    • @import({AutoConfigurationImportSelector.class}):
      给容器导入AutoConfigurationImportSelector组件,作用是将所有需要导入的组价以全类名的方式返回,这些组件会被添加到容器中,导入的组件为非常多的自动配置类(xxxAutoConfiguration),总结就是给容器中导入这个场景需要的组件,并配置好组件。
      有了这些自动配置类,免去了我们手动编写配置注入功能组件等工作
      主要函数为

      List configurations = SpringFactoriesLoader.loadFactoryNames(
                      getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
      

      这个方法使用getSpringFactoriesLoaderFactoryClass-->EnableAutoConfiguration.class
      getBeanClassLoader为一个类加载器,其中从loadFacortyNames函数中可以看到加载器是从META-INF/spring.facroties(spring-boot-autoconfigure包下)文件中读取配置类的全类名,再通过类加载器来加载的。

4:Spring Boot配置

4.1 配置文件

spring boot默认全局配置文件有两种。配置文件放在src/main/resources或 类路径/config下

  • application.properties
  • application.yml
    作用是修改spring boot自动配置配置的默认配置,Spring boot读取文件在底层为我们自动配置好
    yml为YAML文件,关于YAML 文件的语法可以百度搜,很简单,也可以看我的另一篇文章
#配置启动的串口号
server.port=8888

4.2:YAML文件在spring boot中的使用

参考另一篇文章YMAL

你可能感兴趣的:((二):Spring Boot入门)