对于从事java开发工作的小伙伴来说,spring框架肯定再熟悉不过了。spring给开发者提供了非常丰富的api,满足我们日常的工作需求。
如果想要创建bean实例,可以使用@Controller、@Service、@Repository、@Component等注解。
如果想要依赖注入某个对象,可以使用@Autowired和@Resource注解。
如果想要开启事务,可以使用@Transactional注解。
如果想要动态读取配置文件中的某个系统属性,可以使用@Value注解。
等等,还有很多。。
今天咱们重点聊聊 @Value
注解,因为它是一个非常有用,但极其容易被忽视的注解,绝大多数人可能只用过它的一部分功能,这是一件非常遗憾的事情。
所以今天有必要和大家一起,重新认识一下 @Value
。
@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;
前面我们已经见识过spring EL表达式的用法了,在设置空的默认值时特别有用。
其实,empty
方法只是它很普通的用法,还有更高端的用法,不信我们一起看看。
一下子有没有豁然开朗的感觉,有了这些,我们可以通过@Value注解,实现更多的功能了,不仅仅限于注入系统属性。
前面的内容都是基于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中。