码迷,mamicode.com
首页 > 编程语言 > 详细

springboot自动装配(2)---实现一个自定义自动装配组件

时间:2019-07-15 22:47:16      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:import   auto   http   获取数据   日志   整合   建模   文件中   com   

对于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

引入:

技术图片

 

不引入:

技术图片

 

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

 

springboot自动装配(2)---实现一个自定义自动装配组件

标签:import   auto   http   获取数据   日志   整合   建模   文件中   com   

原文地址:https://www.cnblogs.com/nijunyang/p/11191971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!