主页 > Java教程 > @value与@ConfigurationProperties注解

聊聊@value注解和@ConfigurationProperties注解的使用

  • 更新时间:
  • 编辑:姚明远
  • 9676人关注

这篇文章主要介绍了@value注解和@ConfigurationProperties注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教,另外这篇文章主要知识点是关于@value注解、@ConfigurationProp、@value与@ConfigurationProperties注解的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

参考资料
资料:
Java遗传算法编程
大小:
28.8MB
类别:
Java遗传算法电子资源立即下载

聊聊@value注解和@ConfigurationProperties注解的使用

我们整理一篇关于《聊聊@value注解和@ConfigurationProperties注解的使用》技术文章,技术点分析的很透彻,增加了更多知识点内容,希望对网友有用。

@value注解和@ConfigurationProperties注解

@value读取默认配置

yml文件内容如下(装了STS插件以后即可直接使用,改后缀就行了)

user:
  username: xiongda
  sex: man
  age: 20
school:
  name: xtu
  location: hunan

备注:一定要注意之间要留空格,发现颜色变绿色了才是正确的格式,这个坑我刚踩

package com.example.demo.service.impl; 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; 
import com.example.demo.service.ReadConfigService; 
@Service
public class ReadConfigServiceImpl implements ReadConfigService {    
    @Value(value="${user.username}")
    private String username;
    
    @Value(value="${user.sex}")
    private String sex;
    
    @Value(value="${user.age}")
    private String age;
    
    @Value(value="${school.name}")
    private String name;
    
    @Value(value="${school.location}")
    private String location;
    
    @Override
    public String getUserMessage() {
        return "user ="+username+" sex ="+sex+" age="+age;
    }
 
    @Override
    public String getAuthorMessage() {
        return "schoolname="+name+"location="+location;
    }    
}

@ConfigurationProperties读取默认配置

package com.example.demo.config; 
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; 
@Component
@ConfigurationProperties(prefix="user")
public class HelloConfig {
    private String username;    
    private String sex;    
    private String age; 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public String getSex() {
        return sex;
    }
 
    public void setSex(String sex) {
        this.sex = sex;
    }
 
    public String getAge() {
        return age;
    }
 
    public void setAge(String age) {
        this.age = age;
    }    
}

调用的controller层

package com.example.demo.web; 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; 
import com.example.demo.config.HelloConfig;
import com.example.demo.service.ReadConfigService;
 
@RestController
@RequestMapping("hello")
public class HelloController {
    
    @Autowired
    ReadConfigService readConfigService;
    
    @Autowired
    HelloConfig helloConfig;
    
    @RequestMapping("/user")
    public String say() {
       return "username "+helloConfig.getUsername()+" sex "+helloConfig.getSex()+" age "+helloConfig.getAge();
    }
    
    @RequestMapping("/school")
    public String school() {
       return readConfigService.getAuthorMessage();
    }
}

@ConfigurationProperties和@Value使用上的一点区别

@ConfigurationProperties和@Value的一个共同点就是从配置文件中读取配置项。

发现有一点区别,我项目配置中并没有配置hello.msg ,当使用第一段代码时,启动后读取到msg为null,而第二段代码则会抛出异常。

第二段代码有个好处,就是防止我们配置项遗漏,当遗漏时,启动程序肯定出错,这样避免了一些因为遗漏配置项导致的BUG.

第一段代码

import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("hello")
public class HelloProperties {
    private String msg;
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

第二段代码

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Hello2Properties {
    @Value("${hello.msg}")
    private String msg;
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持java学习网。

相关内容

知识点补充

小编:蔡芷蕊 11小时58分钟前编辑补充

@ConfigurationProperties绑定配置信息至Array、List、Map、Bean的实现

: 相关说明: 在SpringBoot中,我们可以通过以下几种方式获取并绑定配置文件中的信息: @Value注解。 使用Environment。 @ConfigurationProperties注解。 通过实现ApplicationListener接口,注册监听器,进行硬编码获取,可参考: https://www.javaxue.com/article/187407.htm 硬编码加载文件获取。 …… 注:一般情况下,第一种、第二种就够用了;但是如果想直接从配置文件中获取到数组、list、map、对象的话, 第一种和第二种的支持性不太好,目前只能获取到数组、list,对map、bean的话,就有点束手无策了。 这时我们可以使用第三种方式进行获取。 环境说明:Windows10、IntelliJ IDEA、SpringBoot 2.1.5.RELEASE @ConfigurationProperties注解获取配置……

小编:公世敏 7小时18分钟前编辑补充

Spring Boot2.0 @ConfigurationProperties使用详解

: 引言 Spring Boot的一个便捷功能是外部化配置,可以轻松访问属性文件中定义的属性。本文将详细介绍@ConfigurationProperties的使用。 配置项目POM 在pom.xml中定义Spring-Boot 为parent parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.0.4.RELEASE/version relativePath/ !-- lookup parent from repository -- /parent 添加依赖 添加web,因为我们需要使用到JSR-303规范的Validator,如果不想使用web依赖,也可以直接依赖hibernate-validator 添加spring-boot-configuration-processor,可以在编译时生成属性元数据(spring-configuration-metadata.json). 添加lombok,可以方便使用注释处理器的功能省去Pojo定义中get set这些麻烦工作. dependency groupIdorg.spri……