spring 如何将配置信息注入静态变量的方法

2025-05-29 0 39

我们学习过将配置信息,通过@Value()的方法注入到对象的变量。这是由于对象是由spring来托管的。那么非spring如果,我们需要在静态方法中,使用配置文件中的值,又该怎么做呢?

传统的错误作法

application.properties

?

1
spring.redis.host=test

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15
@Component

public class RedisServiceImpl implements RedisService {

...

@Value("${spring.redis.host}")

static public String host;

@Value("${spring.redis.port}")

static public Integer port;

...

static public JedisPool getJedisPool() {

if (RedisServiceImpl.host == null) {

logger.info("host 未注入");

}

}

控制台打印为: "host 未注入

正确的方法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24
@Component

public class RedisServiceImpl implements RedisService {

...

static public String host;

static public Integer port;

@Value("${spring.redis.host}")

public void setHost(String host) {

RedisServiceImpl.host = host;

}

@Value("${spring.redis.port}")

public void setPort(Integer port) {

RedisServiceImpl.port = port;

}

...

static public JedisPool getJedisPool() {

if (RedisServiceImpl.host == null) {

logger.info("host 未注入");

} else {

logger.info("host 值为" + RedisServiceImpl.host);

}

}

控制台正确的打印了注入的值。

原因猜想

spring进行组件扫描,遇到@Component时,初始化对象 RedisServiceImpl, 初始化过程中,扫描到@Value注解,将值注入给方法。

接着,方法将值传给了RedisServiceImpl类,故RedisServiceImpl有值 — 正解。

如果将@Value(),直接加到静态私有变量上,则在初始化对象时,由于静态私有变量属于类,所以spring未对类进行操作 — 错误。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://segmentfault.com/a/1190000015262017

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 spring 如何将配置信息注入静态变量的方法 https://www.kuaiidc.com/111424.html

相关文章

发表评论
暂无评论