大家好啊,我是
方圆
炎炎夏日,愿大家能有处乘凉
目录
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
插件,这样,模板发生变化,它就会自动刷新页面。
收获满满,帅帅气气!