@ConfigurationProperties 注解

前言

新的一年到了,在这里先祝大家新年快乐.我们在上一篇spring boot 源码解析12-servlet容器的建立 中 分析 ServerProperties时,发现其类上有@ConfigurationProperties 注解,加上该注解后,就会注入在application.properties中server开头的属性,那么它是怎么生效的呢?我们这篇文章就来分析一下.这篇文章内容比较长,大家慢慢看… 
@ConfigurationProperties 使用方式

我们首先声明实体类,用于属性的注入.代码如下:
    public class People {

        private String name;

        private Integer age;

        private List<String> address;

        private Phone phone;

        // get set 忽略,自己加上即可..
    }


    public class Phone {

        private String number;

        // get set 忽略,自己加上即可..  

    }
在application.properties 中加入如下配置:

com.example.demo.name=${aaa:hi}
com.example.demo.age=11
com.example.demo.address[0]=北京
com.example.demo.address[1]=上海
com.example.demo.address[2]=广州
com.example.demo.phone.number=1111111


@ConfigurationProperties 注解支持两种方式.

    加在类上,需要和@Component注解,结合使用.代码如下:

    @Component
    @ConfigurationProperties(prefix = "com.example.demo")
    public class People {

        private String name;

        private Integer age;

        private List<String> address;

        private Phone phone;
    }   

    通过@Bean的方式进行声明,这里我们加在启动类即可,代码如下:

    @SpringBootApplication
    public class DemoApplication {

        @Bean
        @ConfigurationProperties(prefix = "com.example.demo")
        public People people() {

            return new People();
        }

        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }


    }

这里我们使用第2种,原因是这样好debug,看源码…

我们再写一个Controller进行测试一下吧.代码如下:

@RestController
public class TestController {

    @Autowired
    private People people;

    @RequestMapping("/get_name")
    public String getName() {

        return people.getName();
    }

    @RequestMapping("/get_address")
    public List<String> getAddress() {

        return people.getAddress();
    }

    @RequestMapping("/get_phone_numer")
    public String getNumber() {

        return people.getPhone().getNumber();
    }
}


访问 /get_name,其返回值如下:

    hi

访问 /get_address,其返回值如下:

    [“北京”,”上海”,”广州”]

访问 get_phone_numer,其返回值如下:

    1111111

使用方式就介绍完了,接下来,我们就来看看spring 是如何处理的吧.

猜你喜欢

转载自blog.csdn.net/liyantianmin/article/details/81020749