SpringBoot——入门(HelloWorld和探究HelloWorld)

一.简介

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。

以往我们采用Spring+SpringMVC+MyBatis框架进行开发的时候,搭建和整合三大框架,我们需要做很多的工作,需要配置web.xml,Spring的配置文件,SpringMVC的配置文件等。使用Spring Boot不需要配置这么多东西,只需要简单配置就可以搭建起框架。

SpringBoot的特点

  • 为基于Spring的开发提供更快的入门体验
  • 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
  • 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
  • SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

     SpringBoot的核心功能

  • 起步依赖
    起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依
    赖,这些东西加在一起即支持某项功能。
    简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
  • 自动配置
    Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

二.使用Maven创建HelloWorld

环境约束
  • jdk1.8Spring Boot 推荐jdk1.7及以上;java version "1.8.0_112"
  • maven3.xmaven 3.3以上版本;Apache Maven 3.3.9
  • IntelliJIDEA2019
  • SpringBoot 2.3.0.RELEASE
  • 统一环境;

2.1 Maven设置

1.创建一个maven工程;(jar

2.导入SpringBoot的相关依赖;

   
        org.springframework.boot
        spring-boot-starter-parent
        2.3.0.RELEASE
         
    
  
        
            org.springframework.boot
            spring-boot-starter-web
        
 

3.编写一个主程序,启动Spring Boot应用

/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
   public static void main(String[] args) {
    // Spring应用启动起来
       SpringApplication.run(HelloWorldMainApplication.class,args);
  }
}

4.编写相关的Controller,Service;

@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
  public String hello(){
    return "Hello World!";
  }
}

5.运行主程序测试;

6.简化部署

   

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

三.HelloWorld探究

3.1 POM文件

3.1.1 父项目

   
        org.springframework.boot
        spring-boot-starter-parent
        2.3.0.RELEASE
         
    


这个的父项目是:
 
    org.springframework.boot
    spring-boot-dependencies
    2.3.0.RELEASE
  

查看这个项目可以发现是这个项目来管理SpringBoot应用里面的所有依赖版本

  Spring Boot的版本仲裁中心; 以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)

3.1.2 启动器

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

spring-boot-starter-web:

spring-boot-starter:spring-boot场景启动器,帮我们导入Web模块正常运行所依赖的组件。

Spring Boot将所有的功能场景都抽取出来,做成一个个的的starter(启动器),只需要项目里面引入这些starter相关的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。

3.2 主程序类,主入口类

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

@SpringBootApplication:SpringBoot应该标注在某个类上说明这个类是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}
)}
)

(1)@SpringBootConfiguration:SpringBoot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类。

@Configuration
public @interface SpringBootConfiguration {
@Component
public @interface Configuration {

          @Configuration配置类(相当于配置文件)上标注这个注解,配置类也是容器中的一个组件@Component。

(2)@EnableAutoConfiguration:开启自动配置功能。以前我们需要配置的东西,Spring Boot帮我们去配置;这个注解告诉Spring Boot开启自动配置功能,这样自动配置才能生效。

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

      @AutoConfigurationPackage:自动配置包

点进入@AutoConfigurationPackage这个注解:

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

        -@Import(Register.class):Spring的底层注解@Import,给容器中导入一个组件;导入的组件是Register.class。

    @Import(AutoConfigurationImportSelector.class):给容器中导入组件

     AutoConfigurationImportSelector:导入哪些组件的容器。将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中。

会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器导入这个场景需要的所有组件,并配置好这些组件。

    protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

    protected Class getSpringFactoriesLoaderFactoryClass() {
        return EnableAutoConfiguration.class;
    }

Spring Boot在启动的时候从类路径下的/META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入容器中,自动配置类就生效,帮我们进行自动配置工作。

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.3.0.RELEASE.jar。

四.使用Spring Initializer快速创建项目

SpringBoot——入门(HelloWorld和探究HelloWorld)_第1张图片

IDEA都支持使用Spring的项目创建向导快速创建一个Spring Boot项目。

选择我们需要的模块,向导会联网创建Spring Boot项目。

默认生成的Spring Boot项目:

SpringBoot——入门(HelloWorld和探究HelloWorld)_第2张图片

  • 主程序已经生成好,只需要自己逻辑。
  • reources文件夹中的目录结构:  

                 static:保存所有的静态资源,jss,cssimages。

                 templates:保存所有模板(spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker,thymeleaf)。

                application.properties:Spring Boot的配置文件,可以修改一些默认配置。

 

你可能感兴趣的:(SpringBoot)