SpringBoot属性注入!


一、SpringBoot的属性注入解释:( @Value  /  @ConfigurationProperties )

1.1):使用SpringBoot全局配置文件设置属性时:

  • 如果配置属性是Spring Boot已有属性,例如服务端口server.port,那么Spring Boot内部会自动扫描并 读取这些配置文件中的属性值并覆盖默认属性。

  • 如果配置的属性是用户自定义属性,例如刚刚自定义的Person实体类属性,还必须在程序中注入这些配 置属性方可生效。

1.2):属性注入常用注解包括:

  • @Configuration:声明一个类作为配置类。

  • @Bean:声明在方法上,将方法的返回值加入Bean容器。

  • @Value:属性注入。

  • @ConfigurationProperties(prefix = “users”):批量属性注入。

  • @PropertySource(“classpath:/jdbc.properties”)指定外部属性文件。在类上添加。

二、使用@Value属性注入:

Demo案例代码,并利用@Value注解注入:

目录结构:(下面我只写用得到的代码哦!注意目录名字)

SpringBoot属性注入!

Users.java:

package com.sxtt.controller.Beans;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;

/***
 * @Author Laugh"
 *
 * 可以通过@Value + SPEL 直接绑定SpringBoot配置文件 .yml里的值
 * @Value()  固定写法,“${XXXX.XXXX}”  配置文件里面的值
 * 案例1:
 * @Value("${users.username}")
 * private String username;
 *
 * 案例2:
 * @ConfigurationProperties(prefix="users")
 * 常用于bean属性和.yml配置文件
 * prefix属性   可以指定配置文件中的某节点,该节点中的子节点将自动和属性进行配对绑定
 * 注意:ConfigurationProperties 这个注解 比较简单,应该说是比较容易/松散,不限定特殊写法,例如:大写 / 驼峰 / 下划线 / 中划线 / 小写 都会被识别
 */
@Component
public class Users {
    @Value("${users.username}")
    private String username;
    @Value("${users.age}")
    private Integer age;
    private List<String> hobby;
    private Date birthday;
    private Map<Integer,String> girlfriend;
    private Address address;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

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

    public List<String> getHobby() {
        return hobby;
    }

    public void setHobby(List<String> hobby) {
        this.hobby = hobby;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Map<Integer, String> getGirlfriend() {
        return girlfriend;
    }

    public void setGirlfriend(Map<Integer, String> girlfriend) {
        this.girlfriend = girlfriend;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Users{" +
                "username='" + username + '/'' +
                ", age=" + age +
                ", hobby=" + hobby +
                ", birthday=" + birthday +
                ", girlfriend=" + girlfriend +
                ", address=" + address +
                '}';
    }
}

application.yml:

server:
  port: 8080
  servlet:
    context-path: /laugh

users:
  username: Laugh"
  age: 25

App.java:

package com.sxtt;
import com.sxtt.controller.Beans.Users;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class App {
    @Autowired
    private Users user;
    @Test
    void contextLoads(){
        System.out.println(user);
    }
}

输出结果:

SpringBoot属性注入!

三、使用@ConfigurationProperties属性注入:

Demo案例代码,并利用@ConfigurationProperties注解注入:

目录结构同上:

注意:其余不变,改变的只有Users.java哦:

Users.java:

package com.sxtt.controller.Beans;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/***
 * @Author Laugh"
 *
 * 可以通过@Value + SPEL 直接绑定SpringBoot配置文件 .yml里的值
 * @Value()  固定写法,“${XXXX.XXXX}”  配置文件里面的值
 * 案例1:
 * @Value("${users.username}")
 * private String username;
 *
 * 案例2:
 * @ConfigurationProperties(prefix="users")
 * 常用于bean属性和.yml配置文件
 * prefix属性   可以指定配置文件中的某节点,该节点中的子节点将自动和属性进行配对绑定
 * 注意:ConfigurationProperties 这个注解 比较简单,应该说是比较容易/松散,不限定特殊写法,例如:大写 / 驼峰 / 下划线 / 中划线 / 小写 都会被识别
 */
@Component
@ConfigurationProperties(prefix="users")
public class Users {
    private String username;
    private Integer age;
    private List<String> hobby;
    private Date birthday;
    private Map<Integer,String> girlfriend;
    private Address address;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

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

    public List<String> getHobby() {
        return hobby;
    }

    public void setHobby(List<String> hobby) {
        this.hobby = hobby;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Map<Integer, String> getGirlfriend() {
        return girlfriend;
    }

    public void setGirlfriend(Map<Integer, String> girlfriend) {
        this.girlfriend = girlfriend;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Users{" +
                "username='" + username + '/'' +
                ", age=" + age +
                ", hobby=" + hobby +
                ", birthday=" + birthday +
                ", girlfriend=" + girlfriend +
                ", address=" + address +
                '}';
    }
}

输出结果:

SpringBoot属性注入!

四、补充说明:

其.yml配置文件,可以有很多种写法:

4.1):小写:

users:
  username: Laugh"
  age: 25

4.2):大写:

users:
  USERNAME: Laugh"
  AGE: 25

4.3):驼峰:

users:
  userName: Laugh"
  age: 25

4.4):中划线:

users:
  user-Name: Laugh"
  age: 25

4.5):下划线:

users:
  user_Name: Laugh"
  age: 25

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/279165.html

(0)
上一篇 2022年8月6日
下一篇 2022年8月6日

相关推荐

发表回复

登录后才能评论