上周把Spring注解的大概内容学习完了,现在回过头来继续看看SpringBoot。不知道是不是假期综合症的原因,这周学习有点心不在焉,于是学习的东西比较少。不过总比没有好吧
一.@Value和@configurationproperties的区别
上一篇讲SpringBoot的文章,我们讲到了通过@configurationproperties读取配置文件中的值然后注入到相关对象中;然后最近回过头学习的Spring的注解中,我们发现Spring是通过@Value注解来进行值的注入的;那么,对于这两个值得注入,有何区别呢?
注:@ConfigurationProperties可以读取yml文件也可以读取普通文件
@ConfigurationPropeties | @Vaule | |
功能 | 批量将配置文件中的值注入到对象 | 一个一个值进行注入 |
松散绑定 | 支持 | 不支持 |
SpEL表达式 | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
1.松散绑定就是说配置文件中如果 键值中的键和被注解的对象的成员变量类似,俺么就是可以注入成功的。例如配置文件中的名字是 logName 而 对象中的是log-name 那么一样注入成功。
2.JSR303数据校验:这个主要是做数据格式的校验,比如说必须是电话号码、邮件等格式等
@configurationproperties读取了配置文件,@Validated代表校验,@Email代表lastName 的值需要是Email格式
3.复杂类型封装是和普通类型的数据类型做比较的(String,Integer等)。但是,如果被注入的成员变量是一个Map一类的对象,那么这个时候使用@Value是无法注入的
二.@ImportResource作用
从Spring注解开发,到SpringBoot的开发,都强调了一件事,那就是注解。像我们以前普通的Spring开发,对象加载到容器的时候,往往需要在Spring配置文件中添加bean标签,然后再指定对应的对象,使其在Spring启动的时候能够被注入到容器中。然而,SpringBoot的配置文件并不会读取”<bean></bean>”,因此如果有特殊情况,那么如何处理?这个时候就可以使用@ImportResource.指定读取配置文件中的bean标签。这个配置的话,放在主配置类上,也就是有配置@SpringBootApplication的那个类(这个类相当于我们原来的配置文件)
所以SpringBoot 建议的方法是和Spring注解一样,设置一个配置类(相当我们原来的配置文件),然后再配置类中用@Bean注解相关要导入的对象(相当我们原来配置文件中的<bean></bean>)