好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

@value注解和@ConfigurationProperties注解

@value读取默认配置

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

?

1

2

3

4

5

6

7

user:

   username: xiongda

   sex: man

   age: 20

school:

   name: xtu

   location: hunan

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

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读取默认配置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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层

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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.

第一段代码

?

1

2

3

4

5

6

7

8

9

10

11

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;

     }

}

第二段代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

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;

     }

}

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

原文链接:https://blog.csdn.net/qq_29914229/article/details/81906406

查看更多关于聊聊@value注解和@ConfigurationProperties注解的使用的详细内容...

  阅读:19次