类型安全的配置
上面我们使用@Value注入每个配置,但是在实际项目中会显得格外麻烦,因为我们的配置通常会是许多个,若使用上例的方式则要使用@Value注入很多次。
Spring Boot 还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全配置。
实战
我们在上面的例子上修改。
1、添加配置,即在application.properties上添加:
author.name=chx author.age=20
当然,如果你不想在这个properties中配置属性,也可以自己新建一个properties文件,这就需要我们在@ConfigurationProperties的属性locations里指定properties的位置,且需要在入口类上配置。
2、类型安全的Bean
package cn.hncu.model; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2017/2/18. * Time: 下午 4:52. * Explain:类型安全的Bean */ @Component @ConfigurationProperties(prefix = "author") //通过locations指定properties文件的位置,这里是在application.properties文件中,可以不指定 public class AuthorSettings { private String name; private Long age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getAge() { return age; } public void setAge(Long age) { this.age = age; } }
通过@ConfigurationProperties加载properties文件内的配置,通过prefix属性指定properties的配置的前缀,通过locations指定properties文件的位置。
如果不是在application.properties文件中,则需要配置locations。例如:
@ConfigurationProperties(prefix = "author",locations = {"classpath:author.properties"})
本例不需要配置locations。
3、检验代码
package cn.hncu; import cn.hncu.model.AuthorSettings; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2017/2/18. * Time: 下午 4:59. * Explain:检验代码类 - 类型安全的配置 */ @RestController public class CheckoutAuthor { @Autowired //直接注入该配置 private AuthorSettings authorSettings; @RequestMapping("/author") public String index2(){ return "author name is "+ authorSettings.getName() +" and author age is "+authorSettings.getAge(); } }
运行。
访问:http://localhost:10090/helloboot/author
效果如下: