“春天里的瑞士军刀”,《Spring实战》(一)

大家好啊,我是方圆
炎炎夏日,愿大家能有处乘凉


1. Pom文件

留意一下,pom文件中<packaging>标签

<packaging>jar</packaging>

我们最常见的Java Web应用打成的都是war包,这里为什么是jar包啊?

  • 这种情况是基于云思维做出的选择,war包非常适合部署到传统的Java应用服务器上,但是对于大多数云服务器来说,并不理想。部分云服务器能够运行war文件,但是所有云服务器能够运行jar文件

下面我们再留意一下<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>

非常明显,我们能看见starter这个单词,这样有个最明显的好处就是

  • 我们能够根据它们所提供的功能,来思考依赖的名字。比如,我们想做web开发,直接就能想到spring-boot-starter-web。

其次

  • 我们不必再担心版本问题。我们所引入的依赖都是基于当前spring框架版本的,所以它一定是兼容的。

2. SpringBootApplication

我们看一下如下代码

package tacos;

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

@SpringBootApplication
public class TacoCloudApplication {

    public static void main(String[] args) {
    	//两个参数,一个为配置类;另一个为命令行参数
    	//尽管传递给run()方法的配置类不一定要用引导类
    	//但是这是最便利和最典型的方法
        SpringApplication.run(TacoCloudApplication.class, args);
    }

}

2.1 注解@SpringBootApplication

@SpringBootApplicaiton是一个组合注解,它的组成如下:
在这里插入图片描述

  • @SpringBootConfiguration:能将该类声明为配置类。这个注解实际上是@Configuration的特殊形式
  • @EnableAutoConfiguration:启动SpringBoot的自动装配。
  • @ComponentScan:启动组件扫描。能够识别被@Component、@Service和@Controller标记的类。

3. SpringBootTest

我们看一下,SpringBootTest测试类代码

package tacos;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
class TacoCloudApplicationTests {

    @Test
    void contextLoads() {
    }

}

3.1 注解@RunWith(SpringRunner.class)

  • @RunWith是JUnit的注解,它会提供一个测试运行器来指导JUnit如何运行测试。在本例中,它会提供给JUnit一个SpringRunner测试运行器,用来创建测试运行所需的Spring应用上下文。

Tips: 你也许熟悉的是SpringJUnit4ClassRunner测试运行器,其实SpringRunner不过是它的一个别名罢了,实在Spring4.3之后引入的,方便了阅读和输入。

3.2 注解@SpringBootTest

  • 该注解的功能很简单,就是告诉JUnit在启动测试时,要引入SpringBoot的功能。可以视为,在main()方法中调用SpringApplication.run()方法

Tips:@RunWith和@SpringBootTest两个注解组合起来,共同加载Spring上下文。


4. 编写Web请求

4.1 简单的控制器类

package tacos;

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

@Controller
public class HomeController {

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

4.1.1 @Controller
  • @Controller会被Spring的组件扫描自动识别发现,并且创建一个HomeController实例作为Spring应用上下文中的bean

Tips: 与@Component、@Service和@Repository功能相同。

4.1.2 视图解析

我们看最后一条语句:

return "home";

SpringBoot会为它在前后加上修饰,如下/templates/home.html,对应的位置如图所示

在这里插入图片描述

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

其中,<img th:src="@{/images/TacoCloud.png}"/>我们要加以注意,图片所在项目中的位置,应为/src/main/resources/static/images/TacoCloud.png,如下图所示
在这里插入图片描述


5. 最终页面结果

在这里插入图片描述


6. 了解SpringBoot DevTools

  • 应用自动重启:当我们对项目中的Java代码和属性文件进行修改时,DevTools会监控变更,当它看到有变化的时候,将会自动重启应用(Spring应用上下文)
    但是它也有一个局限,当我们对依赖进行修改的时候,并不会对其进行重新加载,需要我们手动重启应用,以使其生效。(它有两个独立的类加载器,一个负责加载Java代码和属性文件以及src/main/中的所有内容,另一个负责加载依赖库,DevTools只会重新加载项目代码的类加载器。)
  • 浏览器自动刷新和禁用模板缓存:我们对Thymeleaf进行任意数量的修改后,刷新一下浏览器就能看到结果。(因为模板会有缓存,这样做是为了提高性能,但是不便于我们对模板修改的观察。)
    当我懒到连刷新都不想去点的时候,可以安装LiveReload插件,这样,模板发生变化,它就会自动刷新页面。

收获满满,帅帅气气!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方圆想当图灵

嘿嘿,小赏就行,不赏俺也不争你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值