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

     

     

  • 相关阅读:
    单例模式
    简单工厂模式
    MSSQL编程笔记三 left join on 和 left join where区别
    冒泡排序、选择排序和插入排序
    Extjs性能问题
    C#委托入门
    metro css for cnblogs
    委托、事件与Observer设计模式
    C# 集合类[转]
    工厂方法模式(Factory Method Pattern)
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/9535641.html
Copyright © 2011-2022 走看看