zoukankan      html  css  js  c++  java
  • 使用 properties 配置文件装配 bean 的方式

    在spring中将bean 注册到spring 容器中常见的有三种方式(两类):

    先说明配置文件内容:application.yml,有一段配置如下

    persons:
      youtube:
        name: youtube
        age: 18
      google:
        name: google
        age: 20

    第一类:将单个类注册到容器中

      第一种,使用 @ConfigurationProperties + @Component,配置 GoogleUser

    @Configuration   //效果等同于 @Component
    @ConfigurationProperties(prefix="persons.google") // 表示使用配置文件中前缀为 persons.google 的属性的值初始化该bean定义产生的的bean实例的同名属性,例如会将name 初始化为 "google"
    @Data
    public class GoogleUser{
        private String name;
        private Integer age;
    }

    第二种,使用 @Value

    @Configuration
    @Data
    public class GoogleUser{
        @Value("${persons.google.name}")  //将配置文件中 persons.google.name 属性值注入进来
        private String name;
        @Value("${persons.google.age}")
        private Integer age;
    }

    第二类,@ConfigurationProperties + @Bean注解在配置类的bean定义方法上

    首先需要定义一个普通类,属性有 name、age。Person

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public class Person {    
        private String name;
        private Integer age;
    }

    在配置类中将一个方法定义为一个 bean

    @Configuration
    public class PropertyConf {
        
        @Bean(name="youtubeUser")
        @ConfigurationProperties(prefix="persons.youtube")
        public Person youtubeUser() {
            return new Person();
        }
    
    }

    至此配置完成了,可以写写controller 验证一下了

    @RestController
    public class WelcomeController {
        
        @Autowired
        private GoogleUser p;
        
        @Autowired
        @Qualifier("youtubeUser")
        private Person youtubeUser;
    
        @RequestMapping(value="/hello", method=RequestMethod.GET)
        public String hello() {
            return "hello world";
        }
        
        @RequestMapping(value="/hi/{name}", method=RequestMethod.GET)
        public String hi(@PathVariable String name) {
            System.out.println("user name is:" + name);
            return "hi "+name;
        }
        
        @RequestMapping(value="/person/google", method=RequestMethod.GET)
        public Person getGoogle() {
            System.out.println(p);
            Person result = Person.builder().name(p.getName()).age(p.getAge()).build();
            return result;
        }
        
        @RequestMapping(value="/person/youtube", method=RequestMethod.GET)
        public Person getYoutube() {
            System.out.println(youtubeUser);
            return youtubeUser;
        }
    
    }

    使用 postman 等工具可以测一下了

     

     

  • 相关阅读:
    jquery源码分析
    面试笔试整理3:深度学习机器学习面试问题准备(必会)
    深度学习岗位面试问题整理笔记
    常见面试之机器学习算法思想简单梳理
    TensorFlow与OpenCV,读取图片,进行简单操作并显示
    payload
    IPMB接口协议总结
    uboot 网络驱动模型
    对于phy芯片的认识
    网口扫盲三:以太网芯片MAC和PHY的关系
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/9535641.html
Copyright © 2011-2022 走看看