• 使用 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 等工具可以测一下了

     

     

  • 相关阅读:
    Linux/ visual studio 编译使用Poco
    无法安装 golang.org/x/tools/的库
    大牛blog汇总
    Redis整合Spring结合使用缓存实例
    js增加收藏
    iOS学习笔记12-网络(一)NSURLConnection
    Kick the ball!(dfs)湖南省赛第十届
    windows程序设计——飞机大战笔记(Access数据库的使用)
    DataGridView.DataSource= list(Of T)
    面试之SQL(1)--选出选课数量>=2的学号
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/9535641.html
Copyright © 2020-2023  润新知