Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器

目录

Spring Boot 概述

HelloWorld 快速入门

spring-boot-maven-plugin 插件简化部署

spring-boot-starter-parent 组件

spring-boot-starter-web 组件

@SpringBootApplication 启动类

Spring Initializer 快速创建 Spring Boot 应用


Spring Boot 概述

1、Spring Boot 用来简化 Spring 应用开发,约定大于配置,去繁从简,just run 就能创建一个独立的,产品级别的应用.

2、产生背景:J2EE 笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。

3、解决方法:Spring Boot 为 J2EE 提供一站式解决方案;Spring Cloud 为分布式提供解决方案

4、Spring Boot 就是整个Spring 技术栈的一个大整合:

Spring Boot官网地址:https://spring.io/projects/spring-boot

Spring Boot 在 GitHub 上的开源地址为:https://github.com/spring-projects/spring-boot

Spring Boot 官方所有开源示例:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples

5、Spring Boot 优点:

1、快速创建独立运行的 Spring 项目以及与主流框架集成
2、使用嵌入式的 Servlet 容器,应用无需打成 WAR 包
3、starters 启动器自动依赖与版本控制
4、大量的自动配置,简化开发,也可修改默认值
5、无需配置 XML,无代码生成,开箱即用
6、生产环境的运行时应用监控
7、与云计算的天然集成

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第1张图片

Spring Boot :用于快速开发微服务中的各个功能/小型服务

Spring Cloud :用于将各个功能/小型服务连接起来

Spring Cloud Data Flow :用于处理服务之间的数据

HelloWorld 快速入门

1、环境使用:Maven 3.5.2、Java JDK1.8、IDEA 14、Spring Boot 2.1.3.RELEASE

2、为了体现循序渐进,本文新建 Maven 项目,暂时不使用 Spring 初始化器创建。

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第2张图片

3、pom.xml 依赖添加如下:



    4.0.0

    www.wmx.com
    helloWorld
    1.0-SNAPSHOT

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

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

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

4、新建 MianApp.java 作为做整个应用的启动入口类,同时添加  @SpringBootApplication 注解,表示当前类为主程序类,且这是一个 Spring Boot 应用。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @author wangmaoxiong
 * @version 1.0
 * @SpringBootApplication : 表示当前类为主程序类,这是一个 Spring Boot 应用
 * @date 2020/4/28 17:00
 * 其它 Spring 组件都必须放在应用  @SpringBootApplication 注解所在类的同包或者其子包下面
 */
@SpringBootApplication
public class MainApp {
    public static void main(String[] args) {
        /** 启动 Spring 应用,写法是约定的,就像启动Java FX应用一样 */
        SpringApplication.run(MainApp.class, args);
    }
}

所有其它 Spring 组件(如Controller层、Service层、Dao层、定时器等)都必须放在应用  @SpringBootApplication 注解所在类的同包或者其子包下面,因为应用从启动类开始启动,然后会扫描启动类同包及其子包下面的组件,如果放在其它地方则会因为扫描不到而是要不了。

5、新建一个控制层,用于从浏览器访问:

import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * @author wangmaoxiong
 * @version 1.0
 * @date 2020/4/28 17:02
 */
@Controller
public class HelloWorldController {
    /**
     * http://localhost:8080/hello
     * @return
     * @RequestMapping 表示浏览器地址请求的路径
     * @ResponseBody 表示不是做页面跳转,而是直接返回内容到页面
     */
    @ResponseBody
    @RequestMapping("/hello")
    public String hello() {
        JsonNodeFactory nodeFactory = JsonNodeFactory.instance;
        ObjectNode objectNode = nodeFactory.objectNode();
        objectNode.put("code", 200);
        objectNode.put("meg", "成功");
        objectNode.put("data", "");
        return objectNode.toString();
    }
}

6、启动运行:

1)从输出信息中可以看到,并没有手动配置 Tomcat 服务器,但是仍然启动了一个,而且端口是 8080,这是因为 Spring Boot 自己将 Tomcat 嵌入在内部,且默认使用 8080 端口。

2)路径 "/hello" 访问成功,因为没有配置过应用名,所以默认为空。

spring-boot-maven-plugin 插件简化部署

1、Spring Boot 提供了如下插件可以将整个 Spring Boot 应用(即使是普通的 Java Web 应用)打包成一个可执行 Jar 文件,于是以后可以直接双击就能运行,简化了 web 应用部署。

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

2、可以运行 "package" 将应用打包到 IDEA 工作目录下,也可以运行 "install" 将应用打包到 Maven 本地仓库下

3、运行方式一:直接双击可执行 jar 包 "helloWorld-1.0-SNAPSHOT.jar" 运行应用程序,此时在任务管理器可以看到 "javaw.exe" 的进程,结束此进程即可关闭应用程序。

4、运行方式二:命令行使用 "java -jar ****.jar" 运行应用程序。此时可以看到应用启动信息,也可以看到应用输出的所有信息,就相当于 Tomcat 的启动小黑窗口,关闭命令行窗口即可关闭应用程序。

5、应用中自己编写的类以及所有依赖的 jar 包全部打包到了下面的 "helloWorld-1.0-SNAPSHOT.jar" 中,其中就包括了集成的Tomcat 服务器

spring-boot-starter-parent 组件

1、自己的 Spring Boot 项目需要继承 spring-boot-starter-parent 项目,因为 spring-boot-starter-parent 项目继承了 spring‐boot‐dependencies。

    
        org.springframework.boot
        spring-boot-dependencies
        2.1.3.RELEASE
        ../../spring-boot-dependencies
    

2、spring‐boot‐dependencies 真正管理 Spring Boot 应用里面的所有版本依赖关系,它的 pom.xml 文件也是最大的,是 Spring Boot 的版本仲裁中心;

spring-boot-starter-web 组件

1、spring-boot-starter-web 是 spring-boot 场景启动器(spring-boot-starter)之一,集成了 web 应用开发的常用 API ;

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

3、官网 Starters 可以看到所有的启动器,这些 starters 几乎涵盖了 java ee 所有常用场景,Spring Boot 对这些场景依赖的 jar 也做了严格的测试与版本控制。

4、Spring Boot 所有版本的官方文档:https://docs.spring.io/spring-boot/docs/

@SpringBootApplication 启动类

1、@SpringBootApplication:标注在某个类上说明这个类是 SpringBoot 的主配置类,SpringBoot 就会运行这个类的 main 方法来启动 SpringBoot 应用;

2、@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 {

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

2)@EnableAutoConfiguration:开启自动配置功能,以前需要手动配置的东西,现在Spring Boot帮我们自动进行配置;

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

@Configuration :标识配置类、配置文件;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    String value() default "";
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

1、@Import:导入所有的自动配置场景
2、@AutoConfigurationPackage:定义默认的包扫描规则,程序启动扫描加载主程序类所在的包以及下面所有子包的组件;
3、EnableAutoConfigurationImportSelector:导入哪些组件的选择器,将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
4、Spring Boot 在启动的时候从类路径下的 META-INF/spring.factories 中获取 EnableAutoConfiguration 指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要手动配置的东西,自动配置类都帮我们配置好,J2EE 的整体整合解决方案和自动配置都在spring-boot-autoconfigure-x.x.x.RELEASE.jar 中;

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第3张图片

Spring Initializer 快速创建 Spring Boot 应用

1、虽然可以创建 Maven 应用,然后通过追加依赖与注解的方式改为 Spring Boot 应用,但是实际生产中都是通过 Spring Initializr. 进行快速创建。

2、IDEA 中也集成了 Spring 初始化器来进行快速构建项目 File -> New Project :

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第4张图片

1、https://start.spring.io/ 是 Spring Boot 官网提供的快速构建项目的地址,开发人员可以直接去官网进行构建 Spring Boot 项目然后下载,最后导入到 IDEA 中。

2、如果 https://start.spring.io/  访问慢,则可以将 https 改成 http 试试。

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第5张图片

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第6张图片

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第7张图片

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第8张图片

1、src/main/java:源码目录,主程序 "HelloWorldQuick" 已经生成好了,只需要写我们自己的逻辑业务代码,注意Spring 组件默认必须在主程序同包或者其子包下面。

2、src/main/resources :资源目录;

2.1)static:保存所有的静态资源,如 以前的 js、css、images、音视频文件等;
2.2)templates:保存所有的模板页面,注意 Spring Boot 默认 jar 包使用嵌入式的 Tomcat,默认不支持JSP页面);但可以使用模板引擎,如 freemarker、thymeleaf;
2.3)application.properties:Spring Boot 应用的配置文件,用来修改Spring Boot 的默认设置,如Tomcat的默认端口号等;

3、src/test:Maven 的测试目录。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * Created by Administrator on 2018/7/10 0010.
 *
 * @ResponseBody 写在方法上时,说明对应方法直接返回内容给浏览器;
 * 写在类上时,表示整个类中的方法都直接返回内容给浏览器
 */
@ResponseBody
@Controller
public class HelloWorldController {
    @RequestMapping("hello")
    public String hello() {
        return "Hello World quick !";
    }
}

4、可以修改 Spring Boot 内置的 Tomcat 服务器端口号:

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第9张图片

Spring Boot 概述与 HelloWorld 快速入门、Spring Initializer 初始化器_第10张图片

 

你可能感兴趣的:(Spring,Boot)