序言:SpringBoot 的核心理念是约定优于配置,例如在资源目录的static放置静态资源就能直接访问,templates目录放置动态页面就能自动初始化和实现访问,例如Thymeleaf、FreeMaker等。
项目名称:Demo
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@SpringBootApplication
@Controller
public class DemoApplication {
@GetMapping("/")
@ResponseBody
public String index() {
return "Hello, World";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
运行结果
若写成单独Controller
类
/** * User: Cubby * Describe: Spring Boot test Controller */
@RestController
public class HelloController {
@GetMapping("/")
@ResponseBody
public String index() {
return "Hello, World";
}
@GetMapping("Hi.action")
public String Hi() {
return "Hi,2021年12月27日 农历冬月廿四 星期一 ";
}
}
结果如下:
test
测试类
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import static org.hamcrest.core.StringContains.containsString;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc // start MockMvc
@SpringBootTest
class DemoApplicationTests {
@Autowired
private MockMvc mockMvc; // 注入MockMvc
@Test
void contextLoads() throws Exception {
}
@Test
public void testHelloController() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/")) // request style + address
.andDo(print()) // print effect
.andExpect(status().isOk()) // prepare state
.andExpect(content().string(containsString("Hello, World")));
}
}
运行结果
什么是Mock
在面向对象的程序设计中,模拟对象(英语:mock object)是以可控的方式模拟真实对象行为的假对象。在编程过程中,通常通过模拟一些输入数据,来验证程序是否达到预期结果。
为什么没有XML?
回答:回顾传统Spring项目,我们需要先后配置web/spring/mvc等XML
配置文件。而SpringBoot则不需要XML
,只需借助注解和启动类就能启动项目。这背后得益于SpringBoot自动配置
的构建原理,例如我们在POM文件引入了Web依赖
,则项目在启动的时候检测到ClassPath存在Web依赖
,就会自动执行WEB环境初始化
,轻松完成SpringMVC初始化
。
为什么没有webapp目录?
回答:SpringBoot
使用Resources
目录放置静态文件和动态资源。比如static
目录可以直接读取CSS/JS/IMG
等静态资源,而templates
目录可以直接读取动态模板,例如Thymeleaf 和 FreeMarker
等。不过值得注意的是,如果工程项使用War
类型进行打包,则必须创建webapp
目录.
application.properties / application.yml 是什么?
回答:这是 SpringBoot 项目的核心配置文件.
HelloWorldApplication 是什么?
回答:作为项目的启动类,添加Main方法作为启动入口,并添加@SpringBootApplication
便携式启动注解。
@SpringBootApplication
主要包含三大组件:
@EnableAutoConfiguration
开启自动配置.
@ComponentScan
开启组件扫描 例如@Controller,@Service
等.
@Configuration
标记配置类 例如制定方法为上下文提供 Bean.
文章评论