对于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)---实现一个自定义自动装配组件的更多相关文章

  1. 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)

    [SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...

  2. Springboot 系列(三)Spring Boot 自动配置原理

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 关于配置文件可以配置的内容,在 Spring ...

  3. spring学习总结——装配Bean学习一(自动装配)

    一.Spring配置的可选方案 Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系.但是,作为开发人员,你需要告诉Spring要创建哪些bean并且如何将其装配在一起.当描 ...

  4. Spring boot运行原理-自定义自动配置类

    在前面SpringBoot的文章中介绍了SpringBoot的基本配置,今天我们将给大家讲一讲SpringBoot的运行原理,然后根据原理我们自定义一个starter pom. 本章对于后续继续学习S ...

  5. SpringBoot源码学习系列之SpringMVC自动配置

    目录 1.ContentNegotiatingViewResolver 2.静态资源 3.自动注册 Converter, GenericConverter, and Formatter beans. ...

  6. SpringBoot源码学习系列之异常处理自动配置

    SpringBoot源码学习系列之异常处理自动配置 1.源码学习 先给个SpringBoot中的异常例子,假如访问一个错误链接,让其返回404页面 在浏览器访问: 而在其它的客户端软件,比如postm ...

  7. SpringBoot集成Spring Security(2)——自动登录

    在上一章:SpringBoot集成Spring Security(1)——入门程序中,我们实现了入门程序,本篇为该程序加上自动登录的功能. 文章目录 一.修改login.html二.两种实现方式 2. ...

  8. spring自定义自动配置注解

    我们知道springboot自动配置@EnableAutoConfiguration是通过@Import(AutoConfigurationImportSelector.class)来把自动配置组件加 ...

  9. Gradle实现自动打包,签名,自定义apk文件名

    Gradle实现自动打包,签名,自定义apk文件名 什么是签名,签名有什么用 Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行 ...

随机推荐

  1. Java发展历程

    Java 的发展要追溯到 1991 年,Patrick Naughton(帕特里克·诺顿)和 James Gosling(詹姆斯·高斯林)带领 Sun 公司的工程师打算为有线电视转换盒之类的消费产品设 ...

  2. Qt 事件处理 快捷键(重写eventFilter的函数,使用Qt::ControlModifier判断)

    CTRL+Enter发送信息的实现 在现在的即时聊天程序中,一般都设置有快捷键来实现一些常用的功能,类似QQ可以用CTRL+Enter来实现信息的发送. 在QT4中,所有的事件都继承与QEvent这个 ...

  3. HTML特殊编码转换

    var encoded = ""'&<>¡¢£¤" + "¥¦§¨©ª«¬­®" + "¯°±²³´µ¶·" ...

  4. IT回忆录-2

    随着网络的发展,下载工具也不断地更新. 印象比较深的下载工具,从网络蚂蚁.网际快车,到BT. BT出来的时候,对下载真的是一个革命啊,以前下载东西,下载的人越多肯定就越慢,我们之前还会跑到一些FTP上 ...

  5. FastMM、FastCode、FastMove的使用(详细讲解了怎么安装与使用)good

    http://blog.csdn.net/akof1314/article/details/6524767

  6. Linux下的wfopen(手工打造)

    Of Linux on wfopen (open wide-character version of the file name and mode) to achieve Not directly a ...

  7. QT编译./configure参数的详细解释

    可以随便的转载,只要按照规矩走带上咱论坛的链接就好. ======================================全文是按照./configure -help来翻译的========= ...

  8. 原创powershell脚本:通过远程桌面3389黑名单,阻止黑客ip

    远程桌面 3389 ban ip 防火墙 rdp   通过远程桌面3389黑名单,阻止黑客ip.这是一个常见的需求.但我搜遍了谷歌也找不到成品脚本.想做搬运工却做不成,只能自己费尽写.下载备用吧,估计 ...

  9. 使用豆瓣的pip源安装python模块

    1.指定豆瓣pip源安装Django pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com ...

  10. selenium工作原理详解

    selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...