• 中文
    • English
  • 注册
  • 查看作者
    • SpringBoot测试类以及配置文件和配置类

      一  Spring-boot测试

      1.  使用Spring-boott提供的测试功能需要添加以下依赖:

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>

      2.  接下来添加实体类,并为实体类添加以下注解

      • @Component

      • @ConfigurationProperties(prefix = “book”),从application.properties文件中匹配book。(yml文件也能匹配到)

      package io.zhangjia.entity;
      import org.springframework.boot.context.properties.ConfigurationProperties;
      import org.springframework.stereotype.Component;
      @Component
      @ConfigurationProperties(prefix = "book")
      public class Book {
          private String name;
          private Double price;
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }
          public Double getPrice() {
              return price;
          }
          public void setPrice(Double price) {
              this.price = price;
          }
          @Override
          public String toString() {
              return "Book{" +
                      "name='" + name + '\'' +
                      ", price=" + price +
                      '}';
          }
      }

      3.  在test文件下,新建和项目同样的包名,并添加测试类

      package io.zhangjia;
      import io.zhangjia.entity.Book;
      import org.junit.Test;
      import org.junit.runner.RunWith;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.context.SpringBootTest;
      import org.springframework.test.context.junit4.SpringRunner;
      @RunWith(SpringRunner.class)
      @SpringBootTest
      public class SpringBoot01ApplicationTest {
          @Autowired
          private Book book;
          @ Test //注意,@和Test中间并无空格,为避免编辑器bug,所以添加了空格显示
          public void test() {
              System.out.println(book);
          }
      }

      SpringBoot的测试类不需要通过getBean方式去获取对象,可以直接使用@Autowired注解将需要的类对象注入。

      (注意:必须提供setter方法,否则值为NULL)

      4.  在spring中,我们如果想为Book类对象赋值需要在spring的配置文件中通过属性注入来完成属性赋值,而SpringBoot可以直接在application.properties中,使用book去点属性即可为Book类的简单属性赋值:

      book.name=嘎嘎
      book.price=9.9

      5.  此时运行SpringBoot01ApplicationTest,控制台输出:

      Book{name='嘎嘎', price=9.9}

      如果控制台中Book的属性显示中文乱码,请参考本站《Spring-boot简单使用》一文中的解决方法。

      二.  使用application.yml

      除了使用application.properties配置项目外,我们还可以使用application.yml来配置项目,我们可以来简单比较下两者语法上的不同:

      application.properties语法:

      server.port=8888
      server.servlet.context-path=/sb
      
      book.name=嘎嘎
      book.price=9.9

      application.yml语法:

      server:
        port: 8888 #注意,:和8888中间必须有空格
        servlet:
          context-path: /sb  #yaml支持松散绑定,写成驼峰命名法也可以:contextPath
      book:
        name: 嘎嘎嘎
        price: 19.9

      注意,冒号后面需要添加空格,以name为例,如果写成name:嘎嘎嘎,则程序会报错,另外name和price前面的缩进也应保持一致,比如name前面有10个空格,那么price后面也必须有十个空格,且如果name包含其他属性,则该属性缩进应大于10个空格。

      三.  复杂类型

      在上面的Book类中,我们的name和price都是简单类型,如果使用List或者map等复杂类型,可以使用以下赋值方法,首先修改实体类,添加List和Map:

      @Component
      @ConfigurationProperties(prefix = "book")
      public class Book {
          private String name;
          private Double price;
          private List<String> chapter;//章节
          private Map<String,Object> catalog;//目录
          List<Map<String,Object>> lsmo;
          //getter,setter
      }

      接下来就可以在application.yml中为list和map赋值

      (注意:- 和 : 后面都需要添加空格)

      book:
        name: 嘎嘎嘎
        price: 19.9
        chapter: Spring,SpringMVC,Mybatis
        catalog:
          c1: 第1页
          c2: 第20页
          c3: 第30页
        lsmo:
          - v1: 第1页
            v2: 第2页
            v3: 第3页
          - z1: 第1页
            z2: 第2页
            z3: 第3页

      注意, List<Map<String,Object>>中的map的key不能使用中文。除此之外,List和map还有以下写法:

      book:
        chapter: 
            - Spring
            - SpringMVC
            - Mybatis
        catalog:{c1: 第1页,c2: 第20页, c3: 第30页}

      四.  使用其他配置文件

      我们一般称application.properties为主配置文件,除了主配置文件外,我们还可以创建其他配置文件,首先注释掉主配置文件的book相关的代码,然创建一个book.properties文件,来为book类的属性赋值:

      book.name=java开发
      book.price=10.1

      此时执行测试类,还不能取到正确的属性值,我们需要为Book类,添加以下注解:

      • @PropertySource(“classpath:book.properties”):指明book.properties的路径

      @Component
      //去主配置文件中去查找
      @ConfigurationProperties(prefix = "book")
      //如果主配置文件中没有找到,则去book.properties中查找
      @PropertySource("classpath:book.properties")
      public class Book {
          private String name;
          private Double price;
          private List<String> chapter;//章节
          private Map<String,Object> catalog;//目录
          ....
      }

      使用@ConfigurationProperties和@PropertySource注解,可以映射整个配置文件。

      如果使用了@ConfigurationProperties来为属性赋值,那么要提供setter方法,如果使用@Value来为属性赋值,那么不用提供setter方法

      六.  创建SpringBoot项目

      1.   首先点击File—>new—>project,选择Spring Initializr,然后点击下一步

      SpringBoot测试类以及配置文件和配置类

      2.  输入Group和Artifact:

      SpringBoot测试类以及配置文件和配置类

      3.  选择Web,并勾选Spring web Starter,点击next后,再点击finish即可创建完成

      SpringBoot测试类以及配置文件和配置类

      4.  此时我们的项目目录结构如下图,可以看到,之前需要我们一个一个手动创建的包和各类文件,IDEA都已经帮我们一键生成,并添加了相应的注解

      SpringBoot测试类以及配置文件和配置类

      七.  配置类

      在上面的章节中,我们都是使用各类配置文件来对Book的属性进行赋值,除了使用配置文件外,我们还可以直接将Book类作为一个注解类来使用,这个配置类就相当于一个配置文件,只不过是以类的方式呈现。

      1.  首先将上文中的Book类复制到本项目中,并将Book类的所有注解全部删除,然后在项目中新建config包,并添加ApplicationConfig.java,内容如下:

      package io.zhangjia.springboot2.config;
      
      import io.zhangjia.springboot2.entity.Book;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration //添加此注解,代表这个是一个注解类
      public class ApplicationConfig {
          @Bean //此注解的功能相当于之前Spring文件中的bean标签
          public Book book(){ //方法名相当于之前Spring文件中的bean标签的Id属性
              Book book = new Book();
              book.setName("SpringBoot开发");
              book.setPrice(19.9);
              return book;
          }
      }

      2.  接下来回到测试类,进行测试:

      package io.zhangjia.springboot2;
      
      import io.zhangjia.springboot2.entity.Book;
      import org.junit.Test;
      import org.junit.runner.RunWith;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.context.SpringBootTest;
      import org.springframework.test.context.junit4.SpringRunner;
      
      @RunWith(SpringRunner.class)
      @SpringBootTest
      public class Springboot2ApplicationTests {
      
          @Autowired
          private Book book;
      
          @ Test   //注意,@和Test中间并无空格,为避免编辑器bug,所以添加了空格显示
          public void contextLoads() {
              System.out.println(book);
          }
      
      }

      控制台输出:Book{name='SpringBoot开发', price=19.9},一切正常。

      看到这里大家可能会有疑问,我们将Book类作为注解类有啥用呢?确实没啥用,这里只是以此为例演示配置类的使用方法,比如我们之前SpringMVC中配置的拦截器,就可以将其作为配置类来处理。

    • 0
    • 0
    • 0
    • 5.3k
    • 请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: