ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot属性注入!

2022-08-05 17:31:30  阅读:195  来源: 互联网

标签:username SpringBoot age private hobby 属性 public 注入


一、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注解注入:

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

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);
    }
}

输出结果:

三、使用@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 +
                '}';
    }
}

输出结果:

四、补充说明:

其.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

 

标签:username,SpringBoot,age,private,hobby,属性,public,注入
来源: https://www.cnblogs.com/superyonng/p/16554893.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有