2019-07-31 17:39:13 +08:00

9.4 KiB
Raw Blame History

spring-boot 基础

目录

一、说明
        1.1 项目结构说明
        1.2 项目依赖
二、spring boot 主启动类
三、开箱即用的web工程
四、模板引擎
        4.1 freemarker
        4.2 thymeleaf
        4.3 文档说明

正文

一、说明

1.1 项目结构说明

  1. 本项目搭建一个简单的 hello spring 的 web 工程,简单说明 spring-boot 的开箱即用的特性;
  2. 模板引擎采用 freemaker 和 thymeleaf 作为示例,分别对应模板文件 makershow.ftl 和 leafShow.html
  3. spring boot 2.x 默认是不支持 jsp 的,需要额外的配置,关于使用 jsp 的整合可以参考spring-boot-jsp 项目。

1.2 项目依赖

导入相关的 starter(启动器)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.heibaiying</groupId>
    <artifactId>spring-boot-base</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-base</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--模板引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--web 启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--lombok 插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--测试相关依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!--Spring Boot 的 Maven 插件Spring Boot Maven plugin能够以 Maven 的方式为应用提供 Spring Boot 的支持-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  1. spring boot 项目默认继承自 spring-boot-starter-parent而 spring-boot-starter-parent 继承自 spring-boot-dependencies, spring-boot-dependencies 中定义了关于 spring boot 依赖的各种 jar 包的版本,是 spring boot 的版本管理中心。
  1. 关于 spring boot 2.x 官方支持的所有 starter 可以参见官方文档 Table 13.1. Spring Boot application starters

二、spring boot 主启动类

如果采用 IDEA 或者 Spring Tool Suite (STS) 等开发工具创建的 spring boot 工程,会默认创建启动类,如果没有创建,需要手动创建启动类

package com.heibaiying.springbootbase;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootBaseApplication {

    // 启动类默认开启包扫描,扫描与主程序所在包及其子包,对于本工程而言 默认扫描 com.heibaiying.springbootbase
    public static void main(String[] args) {
        SpringApplication.run(SpringBootBaseApplication.class, args);
    }

}

@SpringBootApplication 注解是一个复合注解,里面包含了@ComponentScan 注解,默认开启包扫描,扫描与主程序所在包及其子包,对于本工程而言 默认扫描 com.heibaiying.springbootbase

@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 {
    ...
}

三、开箱即用的web工程

在 springbootBaseApplication.java 的同级目录创建 controller 文件夹,并在其中创建 RestfulController.java,启动项目访问 localhost:8080/restful/programmers 即可看到项目搭建成功。

/**
 * @author : heibaiying
 * @description : restful 控制器
 */
@RestController
@RequestMapping("restful")
public class RestfulController {

    @GetMapping("programmers")
    private List<Programmer> getProgrammers() {
        List<Programmer> programmers = new ArrayList<>();
        programmers.add(new Programmer("xiaoming", 12, 100000.00f, LocalDate.of(2019, Month.AUGUST, 2)));
        programmers.add(new Programmer("xiaohong", 23, 900000.00f, LocalDate.of(2013, Month.FEBRUARY, 2)));
        return programmers;
    }
}

这里之所以能够开箱即用,是因为我们在项目中导入 spring-boot-starter-web 启动器,而@SpringBootApplication 复合注解中默认开启了@EnableAutoConfiguration 注解允许开启自动化配置spring 在检查导入 starter-web 的依赖后就会开启 web 的自动化配置。

四、模板引擎

这里我们在一个项目中同时导入了 freemaker 和 thymeleaf 的 starter虽然并不推荐但是在同一个项目中是可以混用这两种模板引擎的

4.1 freemarker

/**
 * @author : heibaiying
 * @description : 跳转渲染模板引擎 默认模板的存放位置为 classpath:templates
 */
@Controller
@RequestMapping("freemarker")
public class FreeMarkerController {

    @RequestMapping("show")
    private String programmerShow(ModelMap modelMap){
        List<Programmer> programmerList=new ArrayList<>();
        programmerList.add(new Programmer("xiaoming",12,100000.00f,LocalDate.of(2019,Month.AUGUST,2)));
        programmerList.add(new Programmer("xiaohong",23,900000.00f,LocalDate.of(2013,Month.FEBRUARY,2)));
        modelMap.addAttribute("programmers",programmerList);
        return "markerShow";
    }
}

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>freemarker 模板引擎</title>
</head>
<body>
    <ul>
        <#list programmers as programmer>
           <li>姓名: ${programmer.name} 年龄: ${programmer.age}</li>
        </#list>
    </ul>
</body>
</html>

4.2 thymeleaf

/**
 * @author : heibaiying
 * @description : 跳转渲染模板引擎 默认模板的存放位置为 classpath:templates
 */
@Controller
@RequestMapping("thymeleaf")
public class ThymeleafController {

    @RequestMapping("show")
    private String programmerShow(ModelMap modelMap) {
        List<Programmer> programmerList = new ArrayList<>();
        programmerList.add(new Programmer("xiaoming", 12, 100000.00f, LocalDate.of(2019, Month.AUGUST, 2)));
        programmerList.add(new Programmer("xiaohong", 23, 900000.00f, LocalDate.of(2013, Month.FEBRUARY, 2)));
        modelMap.addAttribute("programmers", programmerList);
        return "leafShow";
    }
}

<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>thymeleaf 模板引擎</title>
</head>
<body>
    <ul th:each="programmer:${programmers}">
        <li>
            姓名:<span th:text="${programmer.name}"></span>
            薪水:<span th:text="${programmer.salary}"></span>
        </li>
    </ul>
</body>
</html>

4.3 文档说明

freemarker提供了完善的中文文档地址 http://freemarker.foofun.cn/

thymeleaf官方英文文档地址thymeleaf 3.0.11RELEASE

注:我在本仓库中也上传了一份thymeleaf 中文文档gangzi828(刘明刚 译),翻译的版本为 3.0.5RELEASE