• 中文
    • 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.7k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: