Spring实战系列笔记

第一章 Spring起步

文章目录

    • 第一章 Spring起步
      • 1.为什么要学习spring?
      • 2.Spring Framework
      • 3.Spring的整体架构
      • 4.我对Spring的理解
      • 5.Spring的目录结构
      • 6.pom文件的部分讲解
      • 7.注解讲解:
        • 1.@SpringBootApplication的讲解
        • 2.@RunWith与@SpringBootTest
        • 3.@Controller注解和@GetMapping注解
      • 8.测试控制器
      • 9.了解Spring Boot DevTools

1.为什么要学习spring?

官网解释: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应用都可以从中受益。

2.Spring Framework

Spring基础框架,可以视为Spring基础设施,基本上任何其他Spring项目都是以Spring Framework为基础的。

Spring是于 2003 年兴起的一个轻量级Java开源框架,由Rod Johnson在其著作Expert One-On-One J2EE Design and Development 中阐述的部分理念和原型衍生而来。Spring是为了解决企业应用开发的复杂性而创建的,它使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发,从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

3.Spring的整体架构

Spring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块,如图所示。

Spring实战系列笔记_第1张图片

4.我对Spring的理解

Spring实战系列笔记_第2张图片

最简单的举例来说明bean和Spring应用上下文的关系就是:bean就是商品,spring就是库存,商品需要依赖于库存为用户服务,如果没有库存,就不能为用户提供信息。

Spring实战系列笔记_第3张图片

Spring实战系列笔记_第4张图片

5.Spring的目录结构

Spring实战系列笔记_第5张图片

  • mvnw和mvnw.cmd是maven包装器脚本,借助这些脚本,即使机器上并没有安装maven,也可以构建项目
  • pom.xml:maven的命名规范
  • TacoCloudApplication.java:这是Spring Boot主类。
  • application.properties:配置属性
  • static:存放静态内容(图片,样式表,js等),文件夹初始为空
  • templates:存放渲染内容到浏览器的模板文件,会添加Thymeleaf模板
  • TacoCloudApplicationTests.java:简单的测试类

6.pom文件的部分讲解

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依赖的三个好处

  • 文件小,易于管理,不必为每个库都声明依赖
  • 可以根据功能来思考依赖,而不是根据库名。比如开发web应用,只需要添加web starter就可以了
  • 不必担心库版本的问题,可以直接相信给定版本的Spring Boot,传递性引入的库是版本兼容的。只需要关心使用的是哪个版本的Spring Boot即可。

2.plugins

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
        plugin>
    plugins>
build>

这个插件提供了一些重要的功能

  • 提供了一个maven goal,允许我们使用maven来运行。
  • 确保依赖的所有库都在可执行jar中,并且保证路径正确
  • 会在jar中生成一个manifest文件,将类TacoCloudApplication声明为jar主类

7.注解讲解:

1.@SpringBootApplication的讲解

  • SpringBootApplication是一个组合注解,它组合了三个其他的注解
    • @SpringBootConfiguration:将该类声明为配置类。实际上是@Configuration注解的特殊形式。
    • @EnableAutoConfiguration:启用SpringBoot的自动配置。
    • @ComponentScan:启用扫描组件

2.@RunWith与@SpringBootTest

@RunWith(SpringRunner.class)
@SpringBootTest
class TacoCloudApplicationTests {
    @Test
    void contextLoads() {
    }
}

@RunWith是JUnit的注解,它会提供一个测试运行器(runner)来指导Junit如何测试运行,也可将其想象为给JUnit应用的一个插件,以提供自定义的测试。

  • SpringRunnner是Spring提供的测试运行器,会创建测试运行所需的Spring上下文。
  • SpringBootTest告诉JUnit在启动测试的时候添加上SpringBoot的功能

3.@Controller注解和@GetMapping注解

@Controller
public class HomeController {
    @GetMapping("/")
    public String home(){
        return "home";  /*返回试图名*/
    }
}

@Controller注解是让组件扫描将这个类识别为一个组件。因为HomeController带有@Controller,所以Spring的组件扫描功能会自动发现并创建一个HomeController实例作为Spring应用上下文的bean

@GetMapping注解表明对“/”发送HTTP GET请求,那么这个方法就会处理请求,该方法只是返回String类型的home值

8.测试控制器

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

Spring实战系列笔记_第6张图片

9.了解Spring Boot DevTools

1.DevTools并不是IDE插件,他也不需要使用特定的IDE

2.DevTools会自动监测代码和文件变更,但他看到有变更时,会自动重启应用。

进一步理解就是DevTools运行的时候,应用上程序会被加载到两个不同的类加载器中。其中一个会加载java代码,src/main路径下的所有内容。另一个会加载依赖的库

3.DevTools具有浏览器自动刷新和禁用模板缓存的功能

定的IDE

2.DevTools会自动监测代码和文件变更,但他看到有变更时,会自动重启应用。

进一步理解就是DevTools运行的时候,应用上程序会被加载到两个不同的类加载器中。其中一个会加载java代码,src/main路径下的所有内容。另一个会加载依赖的库

3.DevTools具有浏览器自动刷新和禁用模板缓存的功能

不足之处:自动重启无法反映依赖项的变化

你可能感兴趣的:(框架系列,spring,java,spring,boot)