惊呆了,一个简单的@Value竟然能玩出这么多花样!

本文深入探讨了Spring框架中的@Value注解,它用于注入配置属性和实现动态值。除了基本的属性注入,还介绍了如何设置默认值、使用Spring Expression Language (SpringEL) 进行复杂表达式操作,以及如何注入静态类的方法。通过示例展示了如何注入系统路径分隔符和随机数。@Value注解的高级用法扩展了其在实际开发中的应用场景。
摘要由CSDN通过智能技术生成

f417d3bcf5bc4825ea846fc07c983b75.png

若有收获,请记得分享和转发哦

前言

对于从事java开发工作的小伙伴来说,spring框架肯定再熟悉不过了。spring给开发者提供了非常丰富的api,满足我们日常的工作需求。

如果想要创建bean实例,可以使用@Controller、@Service、@Repository、@Component等注解。

如果想要依赖注入某个对象,可以使用@Autowired和@Resource注解。

如果想要开启事务,可以使用@Transactional注解。

如果想要动态读取配置文件中的某个系统属性,可以使用@Value注解。

等等,还有很多。。

今天咱们重点聊聊 @Value注解,因为它是一个非常有用,但极其容易被忽视的注解,绝大多数人可能只用过它的一部分功能,这是一件非常遗憾的事情。

所以今天有必要和大家一起,重新认识一下 @Value

162c1e935c19c5d80837215fe9d0f9fe.png

2dc4a6abab4f5316ff3df730affabb03.png

6484b4c28685fb00ae9b4442fc53df0c.png

33603940f5460198b34839c05fc45a1e.png

4284cc9582825d999a973ee02cade11e.png

3fdde22c9d1913b6149cdf71515d3ccd.png

811cf03c3080f125b7f11a4ba9c30233.png

45fdf9441ed47f6f649251106a0fe81c.png

6940c8d8ad33005c348e34af198080b9.png

83e588d7ea0c3f2dd66bbe73c85407ab.png

d8330e641b79bebcdedd855921b45d31.png

18ed7c1203418c2fa66c892bd1591d18.png

0d55e510558167b228e7f9a306317aa7.png

b82c7d99caa3075d176c298369f54bc6.png

5d5b21ece1b0ae1513a78157ade33ca3.png

89244dd30739b4c22c70e362dcb50100.png

9fed081a46c9e2a33192cc4936fe1c7e.png

31e97757f6fe08067abe6a98ea3f07e0.png

6d5ff81ebe0eea6688f31e06518e997c.png

144a7cc985442751bfc0ede9a7a80322.png

63adc2e8ab20629bc215f56a7764d6ac.png

482e5c35943d41581e18d84c6e796d96.png

af67ca845b773ae3c4a422e1c0e212f7.png

b1928db5bc3ccd8d53c2fa22348f6b31.png

84e1efd4be9f60bbd4bfad5fcc01a6ea.png

1dc1c631c02b0171cfd77b1188803044.png

592469dbccb6fb2cb02eccb6e6418d85.png

@Value("#{${susan.test.map}}")
private Map<String, String> map;

配置文件是这样的:

susan.test.map={"name":"苏三", "age":"18"}

这种用法跟上面稍微有一点区别。

设置默认值的代码如下:

@Value("#{'${susan.test.map:}'.empty ? null : '${susan.test.map:}'}")
private Map<String, String> map;

7 EL高端玩法

前面我们已经见识过spring EL表达式的用法了,在设置空的默认值时特别有用。

其实,empty方法只是它很普通的用法,还有更高端的用法,不信我们一起看看。

ad39bcca07790bf283e451b623a888d1.png

62afeec90d2ff0e3c8355804f5f8c612.png

90b2a105ec5ce3cc28d8926a0131af61.png

一下子有没有豁然开朗的感觉,有了这些,我们可以通过@Value注解,实现更多的功能了,不仅仅限于注入系统属性。

7.3 静态类

前面的内容都是基于bean的,但有时我们需要调用静态类,比如:Math、xxxUtil等静态工具类的方法,该怎么办呢?

答:用T加括号。

示例1:

@Value("#{T(java.io.File).separator}")
private String path;

可以注入系统的路径分隔符到path中。

示例2:

@Value("#{T(java.lang.Math).random()}")
private double randomValue;

可以注入一个随机数到randomValue中。

d2464466ef3eca487f50a19428a69824.png

101f05fc5a32754e43003b8ab20614a3.png

d17f967babe79dbf9a444061efbe25ab.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值