<Spring实战>学习时间线-2020年1月18日

本文介绍了Spring Boot的基础知识,包括Spring的核心概念、初始化Spring应用的步骤,如使用IntelliJ IDEA和Maven,以及配置Spring Boot的自动配置。接着讲解了如何处理Web请求,创建控制器,并使用Thymeleaf部署页面。还提到了Spring Boot DevTools的特性,如自动重启和浏览器资源刷新。最后回顾了整个流程,从项目创建到测试的完成。
摘要由CSDN通过智能技术生成
先放小结
  • Spring旨在简化开发;
  • Spring Boot构建在Spring之上,通过简化依赖管理、自动化配置和运行时洞察,使Spring更加易用;
  • Spring应用程序可以使用Spring Initializr进行初始化。基于Web的应用,并且为大多数Java开发环境提供了原生支持;
  • Sping应用上下文中,组件(Bean)可以使用Java或XML显式声明,也可以通过组件扫描发现,还可以使用SpringBoot自动配置功能实现自动化配置;

1.1 什么是Spring

Spring的核心是提供了一个容器,应用上下文(application context),它们会创建和管理应用组件(Bean)。通过依赖注入(dependency injection, DI)将Bean装配在一起。

  • @Contiguration注解,告诉Spring这是一个配置类,会为Spring应用上下文提供bean。
  • @Bean,配置类的方法用@Bean注解标注,表明这些方法返回的对象会以Bean的形式添加到Spring的应用上下文中。

1.2 初始化Spring应用

IntelliJ IDEA初始化Spring项目。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建好之后,我们要导入Maven。
在这里插入图片描述
刚创建的项目,这里会是创建一个settings.xml,这是Maven的全局配置。
创建完后,复制以下代码

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

<mirrors>
    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>
</mirrors>

    <profiles>
        <profile>
            <id>jdk-1.8</id>
            <activation>
                <jdk>1.8</jdk>
            </activation>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>local private nexus</name>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>local private nexus</name>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>


    </profiles>

</settings>

原本的设置是指向国外源的,现在我们将它指向阿里的国内源,下载依赖会快很多。
接下来还要修改一下pom.xml的依赖。

<?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 https://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.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>
            UTF-8</project.build.sourceEncoding>
        <project.reporting.outputingEncoding>
            UTF-8</project.reporting.outputingEncoding>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>

        <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>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>htmlunit-driver</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.2</version>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

到这里,我们就配置好了,准备开始第一个简单的项目。在这里插入图片描述

  • @SpringBootApplication 是一个组合注解 ,包含以下三个:
  1. @SpringBootConfiguration 实际上就是@Configuration 的特殊形式
  2. @EnableAutoConfiguration 启动Spring Boot的自动配置
  3. @ComponentScan 启用组件扫描

1.3.1 处理Web请求

  • 主页控制器
package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home(){
        return "home";
    }

}
  • @Controller Spring的组件扫描功能会自动发现它,并创建一个HomeController实例作为Spring应用上下文中的Bean。
  • home()是个控制器方法,带有@Getmapping注解,表明如果针对"/"发送HTTP GET请求,那么这个方法将会处理请求。

部署页面,使用Thymeleaf

模板名称是由逻辑视图名派生而来的,再加上"/templates/“前缀和”.html"后缀。最终形成模板路径"/templates/home.html"。所以我们把模板放到"src/main/resources/templates/home.html"目录中。

1.3.2 定义视图

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Taco Cloud</title>
</head>

<body>
    <h1>Welcome to...</h1>
    <img th:src="@{/images/TacoCloud.png}"/>
</body>
</html>

像图片这样的静态资源是放到"src/main/resources/static"文件夹中的。这意味着,在项目中,Taco Cloud Logo土建必须位于"src/main/resource/static/images/TacoCloud.png"。

1.3.3 测试控制器

import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

@RunWith(SpringRunner.class)
@WebMvcTest(HomeController.class)
public class HomeControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    private void testHomePage() throws Exception{
        mockMvc.perform(get("/"))
                .andExpect(status().isOk())

                .andExpect(view().name("home"))

                .andExpect(content().string(
                        containsString("Welcom to my house")));
    }

}

这个测试,没有使用@SpringBootTest标记,而是添加了@WebMvcTest注解。这是Spring Boot所提供的一个特殊测试注解,它会让这个测试在Spring MVC应用在上下文中执行。
首先使用MockMvc对象对"/"(根路径)发起HTTP GET请求。对于这个请求,我们设置了如下预期:

  • 响应应该具备HTTP200(OK)状态;
  • 视图的逻辑名称应该是home;
  • 渲染后的视图应该包含文本"Welcome to…";

1.3.5 了解Spring Boot DevTools

  • 代码变更后应用会自动重启;
  • 当面浏览器的资源(如模板、JavaScript、样式表)等发生变化时,会自动刷新浏览器;
  • 自动禁用模板缓存;
  • 如果使用H2数据库的话,内置了H2控制器。

1.3.6 回顾

  • Spring Initializr创建初始的项目结构;
  • 编写控制器类处理针对主页的请求;
  • 定义了一个视图模板来渲染主页;
  • 编写了一个简单的测试类来验证工作符合预期。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值