@Value的使用

@Value

@ConfigurationProperties与@Value

.yml文件——.properties文件(两种配置文件中引入属性值得方式有所不同)
.yml格式不支持使用注解@PropertySource导入配置
读取属性值:—支持另种方式读取
@@@方式一:SpEL表达式方式读取配置项:@Value("#{configProoerties['key']}")

例:

@Value("#{configProoerties['user.name']}")

String name;

@@@方式二:占位符方式:@Value("${key}")---常用方式

设置默认属性值
默认情况下,缺少配置项会导致。当配置文件application中缺少相关属性值时,可以在属性键后面添加冒号(:)和默认值来。代码如下:
@Value("${key:helloworld}")
String key;
(如果配置文件中没有配置该属性的值,则系统此时不会报异常,而是会使用注解中指定的默认值)

一、.yml文件

配置中:

​ my:
​ id: 100
​ name: zhangsan

使用方式:——普通值

​ 直接在需要引入的属性值上添加对应的注解即可引入:
​ 例:
​ @Value("${my.name}")
​ String name;

	注意:如果配置中没有相关属性配置,则会启动异常;

——数组、集合、map等--(待定TODO)

二、.properties文件(需要引入配置文件位置才行)

配置中:
aa.age=10000
aa.name=zhangsan

或者:

age=10000
name=zhangsan
使用方式1:——普通值
只添加注解:(只使用该注解情况下)@PropertySource("classpath:abc.properties")指定配置文件位置
	@Value("${aa.name}")
	String name;
	@Value("${aa.age}")
	String age;
	
	或者:
	
	@Value("${name}")
	String name;
	@Value("${age}")
	String age;
使用方式2:

​ 只添加注解:@PropertySource(“classpath:abc.properties”)
​ 添加额外注解:@ConfigurationProperties(prefix = “aa”)指定前缀aa(前提是需要使用到的属性有前缀)

	如果使用以上注解,则:
	1、属性的名称要与配置文件中的字段名称相同(不同报异常),
	2、使用中的属性不需要添加 @Value("**")注解
	3、必须需要创建相关属性字段的set()方法才能自动赋值成功


//——数组、集合、map等--(待定TODO)

四、配置文件属性注入静态变量(属性)中————(静态变量只能使用set方式类注入值)

#### 【【【【【【【【注意】】】】】】】】】】

=====【如果是注入静态属性注意:】
=====【idea快捷键生成的 set() 方法会自带static状态修饰符;】
=====【需要手动将其去掉,否则会造成注入失败!】

=====【set()方法中使用 类名.xx 方式  或者 this.xx方式都可;】

#### 【【【【【【【【注意】】】】】】】】】】

注意:如果直接使用以上类似方式注入静态变量,是不行的,都是null;
需要通过set()方式来进行注入

方式一:

配置内容:
(没有前缀情况下)
    age=10000
    name=zhangsan
或:
(有前缀情况下)
    aa.age=10000
    aa.name=zhangsan
使用中:(此种方式有无前缀都通用)
1、属性:
    static String  name;
    static String age;
2、只添加注解:@PropertySource("classpath:abc.properties")			
			@Value("${name}")
			public void setName(String name) {
				Person.name = name;
			}
			@Value("${age}")
			public void setAge(String age) {
				Person.age = age;
			}
			
			或:
			@Value("${aa.name}")
			public void setName(String name) {
				Person.name = name;
			}
			@Value("${aa.age}")
			public void setAge(String age) {
				Person.age = age;
			}

方式二:(此种方式需要配置文件中的属性名必须有前缀才行)(我的理解和测试暂时是这样)

配置内容(必须有前缀情况下):
	aa.age=10000
	aa.name=zhangsan
使用中:(此种方式只对有前缀可行)
	1、需添加注解:@PropertySource("classpath:abc.properties")
		添加额外注解:@ConfigurationProperties(prefix = "aa")指定前缀aa
	2、属性:
	    static String  name;
		static String age;

        @Value("${name}")
        public void setName(String name) {
            Person.name = name;
        }
        @Value("${age}")
        public void setAge(String age) {
            Person.age = age;
        }
				

或:

        @Value("${aa.name}")			
        public void setName(String name) {
        	Person.name = name;
        }			

        @Value("${aa.age}")			
        public void setAge(String age) {
   			Person.age = age;
        }


【使用this样式】
	@Value("${aa.name}")
	public void setName(String name) {
		this.name = name;
	}

	@Value("${aa.age}")
	public void setAge(String age) {
		this.age = age;
	}
	

=================================================

五、对于.properties文件 ,还可以通过Java代码的形式获取配置文件中属性信息:

配置文件:
	aa.age=10000
	name=zhangsan

使用中:

ClassPathResource classPathResource = new ClassPathResource("properties/sas.properties");
InputStream inputStream = classPathResource.getInputStream();
//创建配置类对象
Properties properties=new Properties();
properties.load(inputStream);
//这里还可以加载reader类型数据
//获取属性值
String age = properties.getProperty("aa.age");
String name = properties.getProperty("name");

六、自定义属性值的使用(.properties)

  1. 基本属性类型:字符串、整数、布尔值

    app.numbers=35
    
    app.regiest=true
    
  2. 多行字符串:

    如果属性值很长,则可以将其用反斜杠“\”字段分开,分成几行以提高代码可读性
    
    app.message=你好\
    			你是谁\
    			你好吗?
    
  3. 数组、列表、集合:

    集合值需要用逗号“,”隔开。在调用时,只需将属性注入数组即可。
    
    app.numbers=1,2,3,4
    
    @Value("${app.numbers}")
    
    int[ ]  numbers;
    
    集合和列表完全相同。如果属性的值包含重复项,则只会将一个元素添加到集合中
    
    app.numbers=1,2,3,4
    
    @Value("${app.numbers}")
    
    List<Integer>  numbers;
    
  4. 列表属性自定义分割符:

    默认情况下,Spring使用逗号分割属性值。如果要使用分号这样的分隔符,则可以如下使用方式:
    
    app.numbers=1;2;3;4;5
    
    调用时使用分隔符即可:
    
    @Value("#{'${app.numbers}'.split(';')")
    List<Integer>  numbers;
    
  5. 属性为HashMap:

    对于HashMap,可以在配置文件中设置格式
    
    app.numbers-map={key1:1,key2:2,key3:3}
    
    然后调用方法
    
    @Value("#{${app.numbers-map}}")
    Map<StringInteger>  numberMap;
    

七、自定义属性值的使用(.yml)

  1. 简介:

    YAML语言是一种通用的数据串行化格式。

  2. YAML支持的数据类型

    1. 对象:键值对的集合,又被称为映射(Mapping)、哈希(Hashes)、字典(Dictionary)

      对象的一组键值对用冒号结构表示。

      name:tom

    2. 数组:一组按次序排列的值,又被称为序列(Sequence)、列表(List)

      一组连词线开头的行构成一个数组
      
      -A
      -B
      -C
      上面的代码转换后为	['A','B','C']
      
      -
      	-A
      	-B
      	-C
      以上代码转换后为	[['A','B','C']]
      
      也可以使用行内表示法(待确定明天整 TODO)
      
      car:[bmw,audi]
      上面代码转换后:{car:['bmw','audi']}
      
    3. 复合结构

      对象和数组可以结合使用,形成复合结构:

      animal:-Cat
      ​	-Pig
      
      car:
      ​	BMW:520LI
      ​	AUDI:A7
      
      转换后为:{animal:['Cat','Pig'],car:{BMW:'520LI',AUDI:'A7'}}
      
    4. 纯量

      纯量是最基本的、不可再分的值,支持字符串、布尔值、整数、浮点数、Null、时间、日期。

      number:37
      isSet:true
      parent:~
      iso8601:2021-05-30
      str:你好啊
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值