zoukankan      html  css  js  c++  java
  • springboot自动装配(2)---实现一个自定义自动装配组件

    对于springboot个人认为它就是整合了各种组件,然后提供对应的自动装配和启动器(starter),基于这个流程去实现一个定义的装配组件

    还是这张图

     

    一、创建自己的自动配置工程, spring.factories文件中配置上自己的配置

    1.创建一个Properties类(UserDefProperties)用于接收配置文件配置的参数,类似于RabbitMQ/Mybatis等在yaml中配置的参数(对标该类org.springframework.boot.autoconfigure.amqp.RabbitProperties),

    package com.nijunyang.autoconfig.properties;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    /**
     *  * 自定义的配置类,映射配置文件参数
     * @author: create by nijunyang
     * @date:2019/7/15
     */
    @ConfigurationProperties(prefix = "spring.userdef.model")
    public class UserDefProperties {
        private String userName;
        private Integer age;
        private Double height;
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Double getHeight() {
            return height;
        }
    
        public void setHeight(Double height) {
            this.height = height;
        }
    }

    2.创建一个XXXAutoConfiguration类(UserDefAutoConfiguration),实现我们的装配逻辑也就是从配置文件中获取数据并初始化我们需要的数据,比如RabbitMQ/Mybatis初始化各种连接工厂(org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.RabbitConnectionFactoryCreator#rabbitConnectionFactory),我们这儿就获取配置数据转换成一个对象用于测试效果,

    package com.nijunyang.autoconfig.config;
    
    import com.nijunyang.autoconfig.model.User;
    import com.nijunyang.autoconfig.properties.UserDefProperties;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    
    /**
     * 自定义启动类配置类
     * @author: create by nijunyang
     * @date:2019/7/15
     */
    @Slf4j
    @EnableConfigurationProperties(value = UserDefProperties.class)
    public class UserDefAutoConfiguration {
    
        @Autowired
        private UserDefProperties userDefProperties;
    
        @Bean
        public User user(){
            log.info("自定义自动装配UserDefAutoConfiguration.....");
            User user = new User();
            user.setAge(userDefProperties.getAge());
            user.setUserName(userDefProperties.getUserName());
            user.setHeight(userDefProperties.getHeight());
            return user;
        }
    }

    3. spring.factories文件中配置EnableAutoConfiguration数据指向我们自己的UserDefAutoConfiguration

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
    com.nijunyang.autoconfig.config.UserDefAutoConfiguration

    二、创建自己的启动器(starter)

    1.启动器啥都不需要做,只需要引入自动配置工程依赖

    <dependency>
                <groupId>com.nijunyang</groupId>
                <artifactId>autoconfig</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>

    三、测试工程

    1. 引入启动器依赖

    <dependency>
                <groupId>com.nijunyang</groupId>
                <artifactId>starter</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>

    2. application.properties配置中加入自动配置工程中Properties类对应的值,类似我们在application.properties配置mybatis连接一样

    spring.userdef.model.userName=zhangsan
    spring.userdef.model.age=18
    spring.userdef.model.height=1.70

    3.测试接口类,自动注入我们用我们用于测试的建模

    package com.nijunyang.autoconfigurationstartertest.controller;
    
    
    import com.nijunyang.autoconfig.model.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author: create by nijunyang
     * @date:2019/7/15
     */
    @RestController
    public class Controller {
    
        @Autowired
        User user;
    
        @GetMapping("/test")
        public User getUser()
        {
            return user;
        }
    
    //    @GetMapping("/test")
    //    public String getUser()
    //    {
    //        return "123";
    //    }
    }

    4.启动工程查看日志,发现我们自定义的装配类日志会在启动日志输出,说明启动过程中去自动装配了自己的组件

     

    5.测试接口访问,返回配置文件中的数据

    四、断点查看selectImports方法引入自定义启动和不引入对比,org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#selectImports

    引入:

    不引入:

    至此就简单实现了一个自定义的自动装备组件...

  • 相关阅读:
    PythonSource Maya
    Max中ActiveX出错的解决方式
    技术美术基础知识之OLE
    MaxSDK中版本定义及对不同版本的兼容
    MaxSDK中卸载插件的方法
    MaxScript生成Gif
    将多个Shape附加给一个transform的MayaPython
    Max做履带,简单方法一则
    使用Python开发Maya导出插件的一些辅助
    MaxScript使用Flash做界面
  • 原文地址:https://www.cnblogs.com/nijunyang/p/11191971.html
Copyright © 2011-2022 走看看