官网解释:Spring makes programming Java quick,easier,and safe for everybody,Spring’s focus on speed,simplicity,and productivity has made it the world’s most popular Java framework.
简而言之就是Spring让java编译变得更加快捷简便和安全,spring在速度和简化还有效率上卓有成效,这让他成为世界上最受欢迎的java框架。同时Spring可以解决企业应用开发的复杂性,它使用基本的JavaBean来完成以前只可能由EJB完成的事情。
另外Spring的用途不仅局限于服务器端的开发,从简单性,可测试性和松耦性角度来看,任何Java应用都可以从中受益。
Spring基础框架,可以视为Spring基础设施,基本上任何其他Spring项目都是以Spring Framework为基础的。
Spring是于 2003 年兴起的一个轻量级Java开源框架,由Rod Johnson在其著作Expert One-On-One J2EE Design and Development 中阐述的部分理念和原型衍生而来。Spring是为了解决企业应用开发的复杂性而创建的,它使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发,从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块,如图所示。
最简单的举例来说明bean和Spring应用上下文的关系就是:bean就是商品,spring就是库存,商品需要依赖于库存为用户服务,如果没有库存,就不能为用户提供信息。
1.dependencies
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
SpringBoot startet依赖的特别之处在于他们本身并不包含库代码,而是拉取其他的库,starter依赖的三个好处
2.plugins
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
这个插件提供了一些重要的功能
@RunWith(SpringRunner.class)
@SpringBootTest
class TacoCloudApplicationTests {
@Test
void contextLoads() {
}
}
@RunWith是JUnit的注解,它会提供一个测试运行器(runner)来指导Junit如何测试运行,也可将其想象为给JUnit应用的一个插件,以提供自定义的测试。
@Controller
public class HomeController {
@GetMapping("/")
public String home(){
return "home"; /*返回试图名*/
}
}
@Controller注解是让组件扫描将这个类识别为一个组件。因为HomeController带有@Controller,所以Spring的组件扫描功能会自动发现并创建一个HomeController实例作为Spring应用上下文的bean
@GetMapping注解表明对“/”发送HTTP GET请求,那么这个方法就会处理请求,该方法只是返回String类型的home值
@RunWith(SpringRunner.class)
@WebMvcTest(HomeController.class) /*针对HomeController的web测试*/
public class HomeControllerTest {
@Autowired
private MockMvc mockMvc; /*注入MockMvc*/
@Test
public void testHomePage() throws Exception{
mockMvc.perform(get("/")) /*发起对”/“的请求*/
.andExpect(status().isOk()) /*期望得到HTTP 200*/
.andExpect(view().name("home")) /*期望得到home视图*/
.andExpect((ResultMatcher) content().string( /*期望包含Welcome to...*/
containsString("Welcome to...")
));
}
}
这里使用的是@WebMvcTest注解,这是Spring Boot提供的一个特殊测试注解,他会让这个测试在Spring MVC应用的上下文中执行。它会将HomeController注册到Spring MVC中,这样就能发送请求了。测试类被注入了一个MockMvc,能够让测试实现mockup。
1.DevTools并不是IDE插件,他也不需要使用特定的IDE
2.DevTools会自动监测代码和文件变更,但他看到有变更时,会自动重启应用。
进一步理解就是DevTools运行的时候,应用上程序会被加载到两个不同的类加载器中。其中一个会加载java代码,src/main路径下的所有内容。另一个会加载依赖的库
3.DevTools具有浏览器自动刷新和禁用模板缓存的功能
定的IDE
2.DevTools会自动监测代码和文件变更,但他看到有变更时,会自动重启应用。
进一步理解就是DevTools运行的时候,应用上程序会被加载到两个不同的类加载器中。其中一个会加载java代码,src/main路径下的所有内容。另一个会加载依赖的库
3.DevTools具有浏览器自动刷新和禁用模板缓存的功能
不足之处:自动重启无法反映依赖项的变化