如果觉得支持不够,还是可以自定义转换支持,自定义一个Converter,然后加入到ConverterService这个Bean中,因为后面的BeanPostProcessor依赖的就是ConverterService来处理转换的
所以如果有一些复杂的配置,最好还是使用SpringBoot的方式。
@Value的优势在于,它支持SpEL,而且可以使用在任意一个Bean的方法参数或者字段上
所以这是两种不同的使用场景,看情况自己选择。
不过总体个人倾向于前面一种,因为如果在其他的Bean中直接使用@Value,万一我们要改配置的名字了,结果因为使用了@Value,遍布的到处都是,改起来很麻烦,所以从管理维护的角度来说,@Value太野了。
顺便说一下对@Value的处理位置org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean,当然这里也是处理@Inject @Autowired @Resource的地方
后记从配置文件到程序中使用到配置的值,一共经历两大步
读取配置内容到Environment中,无论任何形式的配置,最后都是一个Property Source
通过BeanPostProcessor来进行配置值绑定注入
如果不满足properties或者yaml格式的配置,可以自定义PropertySourceLoader,可以参考
org.springframework.boot.env.YamlPropertySourceLoader 和org.springframework.boot.env.PropertiesPropertySourceLoader