该文章将做持续更新,我有时间就会更新注解的用途和用意。
目录
@Component:
@ConfigurationProperties :
该注解也是让spring管理被标注的类的,具体作用体现在业务上,众所周知我们将代码分为controller,service,dao三层 但是有些不能准确的划分在这三者中有需要交给spring 管理,那@Component就是解决方法, 不过需要注意的是spring boot 中需要在启动类中加上@ComponentScan("包路径")来指定@Component标注的类的位置。
@ComponentScan("包路径")
和@ComponentScan有同样作用的注解@ComponentScans 意思就是多个@ComponentScan
@ComponentScans(value = {@ComponentScan(value = "包路径"),@ComponentScan(value = "包路径")})
@ComponentScans 不能同时使用@ComponentScan
该注解的prefix可以用来指定被注解的类的属性对应的properties内容
如:配置文件中
demo.configurationproperties.demoName=示例名字
demo.configurationproperties.demoAddress=示例地址
demo.configurationproperties.demoAge=12
注解使用:
注:其中的@Data只是用来自动生成被标注类的setter和getter方法的。
@Component是用来让spring 识别的,spring不先得到bean管理没办法完成属性注入
@Component
@Data
@ConfigurationProperties(prefix = "demo.configurationproperties")
public class DemoForConfiguraionProperties {
private String demoName;
private String demoAddress;
private int demoAge;
}
接着写了一个controller 在controller中通过log将DemoForConfiguraionProperties 的属性打印出来:
@RestController
@Slf4j//日志的注解
@RequestMapping("/oneContro")
public class DemoController {
//将DemoForConfiguraionProperties 自动注入
@Autowired
private DemoForConfiguraionProperties democonfig;
@RequestMapping("/second")
public String second(HttpServletResponse request, HttpServletResponse response){
String demoAddress = democonfig.getDemoAddress();
int demoAge = democonfig.getDemoAge();
String demoName = democonfig.getDemoName();
//打印属性
log.info("地址: "+ demoAddress +"年龄: "+ demoAge +" 名字: "+ demoName);
return "成功";
}
}
访问接口结果展示:
@PropertySource注解可以和@ConfigurationProperties配合使用 ,@PropertySource可以用来指定属性来自那个配置文件,如果不加的话就是默认的application文件
使用实例(接着@ConfigurationProperties):
@PropertySource(value = {"classpath:demo.properties"},encoding = "utf-8")
可以看出value 是数组可以指定多个配置文件
新建配置文件demo.properties
demo.configurationproperties.demoName=指定名字
demo.configurationproperties.demoAddress=指定地址
demo.configurationproperties.demoAge=13
运行请求结果:
注意:只用在application.properties文件中没有配置相应的属性@PropertySource才会起作用,不然依然是application.properties中的配置优先