知其然知其所以然-spring注解

该文章将做持续更新,我有时间就会更新注解的用途和用意。

目录

@Component:

@ConfigurationProperties :


该注解也是让spring管理被标注的类的,具体作用体现在业务上,众所周知我们将代码分为controller,service,dao三层  但是有些不能准确的划分在这三者中有需要交给spring 管理,那@Component就是解决方法, 不过需要注意的是spring boot 中需要在启动类中加上@ComponentScan("包路径")来指定@Component标注的类的位置。

@ComponentScan("包路径")

和@ComponentScan有同样作用的注解@ComponentScans 意思就是多个@ComponentScan

@ComponentScans(value = {@ComponentScan(value = "包路径"),@ComponentScan(value = "包路径")})

@ComponentScans 不能同时使用@ComponentScan

@ConfigurationProperties :

该注解的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

@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中的配置优先

你可能感兴趣的:(注解,spring,java,spring)