关于SpringBoot给属性赋值的几种方式

初始化

我们先写一个实体类

package com.tubai.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/*
    @Component是一个通用注解,可以应用于应用程序的任何类,
    以使其成为Spring托管组件(简单来说,是任何Spring托管组件的通用构造型)
 */
@Component
public class Dog {
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

一、直接赋值

在想要赋值的地方使用注解@Value(填你想要的值)

public class Dog {
    @Value("小白")
    private String name;
    @Value("3")
    private int age;

在需要用到的地方使用注解@AutoWired

关于SpringBoot给属性赋值的几种方式_第1张图片
如果有多个类,框架不知道如何装配有几种方法

方法一、

使用@Primary注解。

它表示在需要自动注入一个单值依赖的地方,却有多个候选依赖,那么这个注解会指定一个类作为preference(偏好)选择。

换句话说,如果有多个候选填充,那么默认选择用@Parimary注解标记的

方法二、使用默认别名

比如我们有一个接口名为Teacher,下面有

ChineseTeacher,EnglishTeacher两个实现类

如果不为@Qualifier注解指定参数那么默认使用类的默认别名,即类的首字母小写,比如:
ChineseTeacher类的默认别名是:chineseTeacher;
EnglishTeacher类的默认别名是:englishTeacher;
方式三、

使用@Service、@Qualifier

用Service起别名 用Qualifer

像这样

@Component
@Service("dog1")
public class Dog {
    @Value("小白")
    private String name;
    @Value("3")
    private int age;

关于SpringBoot给属性赋值的几种方式_第2张图片

二、使用yaml

我们再写个实体类

@Component
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
*
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*
*/
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private int age;
    private boolean happy;
    private Date birthday;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

写yml

person:
  name: QAQ777
  age: 18
  happy: true
  birthday: 2020/11/24
  maps: {k1: v1,k2: v2,k3: v3}
  lists:
    - code
    - music
    - girl
#也可以这样写list: [code,music,girl]
  dog:
    name: 小黑
    age: 10

运行结果
关于SpringBoot给属性赋值的几种方式_第3张图片
如果遇到中文乱码的问题 那么全部上UTF-8即可…
关于SpringBoot给属性赋值的几种方式_第4张图片

三、使用xml

因为xml的配置太麻烦了 此处仅配置一个属性为例子

关于SpringBoot给属性赋值的几种方式_第5张图片

name=芜湖飞行大队
@PropertySource(value = "classpath:QAQ.properties")
public class Person {
    @Value("${name}")
    private String name;
    private int age;
    private boolean happy;
    private Date birthday;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
@SpringBootTest
class ApplicationTests {

    @Autowired
    private Person person;

    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

在这里插入图片描述

总结

关于SpringBoot给属性赋值的几种方式_第6张图片

你可能感兴趣的:(关于SpringBoot给属性赋值的几种方式)