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

目录
  • @value注解和@ConfigurationProperties注解
    • @value读取默认配置
    • @ConfigurationProperties读取默认配置
  • @ConfigurationProperties和@Value使用上的一点区别
    • 第一段代码
    • 第二段代码

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring使用@Value注解与@PropertySource注解加载配置文件操作

    1.@Value注解简介 Spring框架提供的@Value注解可以将外部的值动态注入到Bean中,@Value注解使用在字段.构造器参数和方法参数上. @Value可以指定属性取值的表达式,支持通过#{}使用SpringEL来取值,也支持使用${}来将属性来源中(Properties文件.本地环境变量.系统属性等)的值注入到Bean的属性中. 此注解值的注入发生在AutowiredAnnotationBeanPostProcessor类中. @Value注解实现以下几种情况: (1)注入普通字

  • SpringBoot @ConfigurationProperties注解的简单使用

    源码 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ConfigurationProperties { @AliasFor("prefix") String value() default ""; @AliasFor("value") String prefix()

  • 使用@Value注解从配置文件中读取数组

    @Value注解从配置文件读取数组 作用:从配置文件中取值 用法: 1.取单个值 (1)configuration.properties配置 status.notice.switch=open (2)java文件自动注入 @Value("${status.notice.switch}") private String statusNoticeSwitch; 2.取数组 (1)configuration.properties配置 lanwon.hospital.id=43534,2345

  • Springboot中@Value的使用详解

    Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller.@Service.@Configuration.@Component等Spring托管的类中) 1.普通字符串注入 例:yml中存在key: name: zs @Value注入 @Value("${name}") public String name; 当yml中的name没有对应值时,即yml中为: name: 此时字符串name的值为"" 可设置注入属性的

  • Spring 开发过程中Value 注解的使用场景

    Spring 开发过程中使用 Value 注解对属性进行赋值:常见的场景有三种. 直接对属性进行赋值:包括普通字符串.操作系统属性.文件内容等. 从配置文件中读取简单类型进行赋值:配置文件需要生效才可. 从配置文件中读取复杂类型进行赋值:如数组.Map.对象列表等. 一.直接对属性进行赋值 通过 @Value 将外部的值动态注入到Bean中,使用的情况有: 注入普通字符串 注入操作系统属性 注入表达式结果 注入其他Bean属性:注入beanInject对象的属性another 注入文件资源 注入

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

    目录 @value注解和@ConfigurationProperties注解 @value读取默认配置 @ConfigurationProperties读取默认配置 @ConfigurationProperties和@Value使用上的一点区别 第一段代码 第二段代码 @value注解和@ConfigurationProperties注解 @value读取默认配置 yml文件内容如下(装了STS插件以后即可直接使用,改后缀就行了) user: username: xiongda sex: man

  • 解决springboot利用ConfigurationProperties注解配置数据源无法读取配置信息问题

    @ConfigurationProperties是springboot新加入的注解,主要用于配置文件中的指定键值对映射到一个java实体类上.那么它是怎么发挥作用的呢?下面我们将揭开@ConfigurationProperties的魔法. ConfigurationPropertiesBindingPostProcessor这个bean后置处理器,就是来处理bean属性的绑定的,这个bean后置处理器后文将称之为properties后置处理器.你需要知道以下几件事: ioc容器context的e

  • SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

    properties配置文件如下: human.name=Mr.Yu human.age=21 human.gender=male 如何把properties里面的配置绑定到JavaBean里面,以前我们的做法如下: public class PropertiesUtil { public static void getProperties(Person person) throws IOException { Properties properties = new Properties();

  • JSP 中Spring组合注解与元注解实例详解

    JSP 中Spring组合注解与元注解实例详解 摘要: 注解(Annotation),也叫元数据.一种代码级别的说明.它与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明 1. 可以注解到别的注解上的注解称为元注解,被注解的注解称为组合注解,通过组合注解可以很好的简化好多重复性的注解操作 2. 示例组合注解 import org.springframework.context.annotation.ComponentScan; im

  • SpringBoot 中常用注解及各种注解作用

    本篇文章将介绍几种SpringBoot 中常用注解 其中,各注解的作用为: @PathVaribale 获取url中的数据 @RequestParam 获取请求参数的值 @GetMapping 组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写 @RestController是@ResponseBody和@Controller的组合注解. @PathVaribale 获取url中的数据 看一个例子,如果我们需要获取Url=localhost:

  • Spring的组合注解和元注解原理与用法详解

    本文实例讲述了Spring的组合注解和元注解原理与用法.分享给大家供大家参考,具体如下: 一 点睛 从Spring 2开始,为了相应JDK 1.5推出的注解功能,Spring开始加入注解来替代xml配置.Spring的注解主要用来配置和注入Bean,以及AOP相关配置.随着注解的大量使用,尤其相同的多个注解用到各个类或方法中,会相当繁琐.出现了所谓的样本代码,这是Spring设计要消除的代码. 元注解:可以注解到别的注解上去的注解. 组合注解:被注解的注解,组合注解具备其上的元注解的功能. Sp

  • 通过实例解析Spring组合注解与元注解

    这篇文章主要介绍了通过实例解析Spring组合注解与元注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.概述 1.1.Spring提供了大量的注解, 尤其是相同的注解用到各个类中,会相当的啰嗦: 1.2.元注解: 可以注解到别的注解上的注解: 组合注解: 被注解注解的注解称为 组合注解: 组合注解 具备 元注解 的功能,Spring的很多注解都可以作为元注解: 1.3.案例 package com.an.config; import co

  • 深入理解注解与自定义注解的一些概念

    一.注解介绍 注解就是一种标记符号,可以在代码上的关键节点(类.方法.变量.参数.包)打上标记,然后程序在编译时或者运行时就可以检测到这些标记从而执行一些自己需要的功能操作. 自定义注解的步骤可以简化成三步 1.定义注解:用@Interface创建,并加上常用的元注解和自定义注解类型元素. 2.实现注解功能:编写注解的功能,一般都是通过AOP在程序运行时去捕获这个标记从而实现.(这步很关键,也是实现自定义注解的关键) 3.使用定义注解:将注解修饰/标记到需要的程序代码中. 通过我们最常见的一个注

随机推荐