今天和大家分享Spring Boot的自动装配原理,并手写一个Starter加深对Spring Boot的理解。

众所周知,Spring Boot为了简化开发,省去了Spring中很多的XML文件。为了理解Spring Boot中自动装配的原理,今天我们基于这个机制自己动手实现一个Starter组件。

项目结构

步骤

  1. 新建一个名为:redis-spring-boot-starter的Maven项目
  2. 添加Maven依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.11.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.3.2.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
  1. 定义属性,实现在applications.properties中的Redis的连接参数。
@ConfigurationProperties(prefix = "gp.redisson")
public class RedissonProperties {private String host = "localhost";private String password;private int port = 6379;private int timeout;private boolean ssl;public String getHost() {return host;}public void setHost(String host) {this.host = host;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public int getTimeout() {return timeout;}public void setTimeout(int timeout) {this.timeout = timeout;}public boolean isSsl() {return ssl;}public void setSsl(boolean ssl) {this.ssl = ssl;}
}
  1. 定义需要自动装配的配置类
@Configuration
@ConditionalOnClass(Redisson.class)
@EnableConfigurationProperties(RedissonProperties.class)
public class RedissonAutoConfiguration {@BeanRedissonClient redissonClient(RedissonProperties redissonProperties) {Config config = new Config();String prefix = "redis://";if (redissonProperties.isSsl()) {prefix = "rediss://";}SingleServerConfig singleServerConfig = config.useSingleServer().setAddress(prefix + redissonProperties.getHost() + ":" + redissonProperties.getPort()).setConnectTimeout(redissonProperties.getTimeout());if (!StringUtils.hasText(redissonProperties.getPassword())) {singleServerConfig.setPassword(redissonProperties.getPassword());}return Redisson.create(config);}
}
  1. resource文件夹下新建META-INF/spring.fatories文件,使Spring Boot程序可以扫描文件完成自动装配
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jonssonyan.config.RedissonAutoConfiguration
  1. 打包成jar包
  2. 在其他项目引入当先依赖
        <dependency><groupId>com.jonssonyan</groupId><artifactId>redis-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version></dependency>
  1. properties中配置host等RedisProperties中定义的属性

总结

通过一个简单的例子,让我们加深理解Spring Boot的自动装配原理,让我们对Spring Boot有个更深的理解。

手写一个Spring Boot Starter相关推荐

  1. zookeeper springboot_摊牌了!我要手写一个“Spring Boot”

    ❝ 目前的话,已经把 Spring MVC 相关常用的注解比如@GetMapping .@PostMapping .@PathVariable 写完了.我也已经将项目开源出来了,地址:https:// ...

  2. 摊牌了!我要手写一个“Spring Boot”

    目前的话,已经把 Spring MVC 相关常用的注解比如@GetMapping .@PostMapping .@PathVariable 写完了.我也已经将项目开源出来了,地址:https://gi ...

  3. 一个项目有两个pom_实现一个Spring Boot Starter超简单,读 Starter 源码也不在话下...

    Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置.不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置 ...

  4. 实现一个 Spring Boot Starter 原来如此简单,读 Starter 源码也不在话下

    我是风筝,公众号「古时的风筝」,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者.现已转行程序员鼓励师 Spring Cloud 系列文章已经完成,可以 ...

  5. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  6. 自己手写一个Spring MVC框架

    想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...

  7. 快速开发一个自定义 Spring Boot Starter ,希望你也会

    来源:http://t.cn/Ai9li9fC 众所周知,Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为 ...

  8. 《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》

    目录 Spring Boot Starter项目创建 自动创建客户端 使用 Starter 使用注解开启 Starter 自动构建 使用配置开启 Starter 自动构建 配置 Starter 内容提 ...

  9. 手把手教你写一个spring IOC容器

    本文分享自华为云社区<手把手教你写一个spring IOC容器>,原文作者:技术火炬手. spring框架的基础核心和起点毫无疑问就是IOC,IOC作为spring容器提供的核心技术,成功 ...

  10. 仿照源码,手写一个自定义 Spring MVC 框架

    毫无疑问,Spring 框架目前已经成为 Java 开发的行业标准,Spring MVC 作为其 Web 解决方案,是所有 Java 开发者都必须掌握的基本技能,理解其底层原理,才能更好地应用它进行实 ...

最新文章

  1. android框架连接mysql_Android:ROOM数据库框架
  2. 记住密码以及Android 列表的操作
  3. 分享Leangoo敏捷工具操作视频
  4. Laravel5.2之Filesystem源码解析(下)
  5. 基于命令序列的异常行为分析 业界研究现状分析
  6. ROS和OpenCV的对接cv_bridge
  7. 基于 Spring 实现管道模式的最佳实践
  8. android 文件删除命令大全,Android中删除sdcard里文件的命令
  9. excel删除行 uipath_高级会计师都在用的Excel批处理技巧,祝你早日告别加班
  10. 链路负载需求及基本原理
  11. matlab 搜索 nan,MATLAB NaN详解
  12. 流程图-时序图-架构图,部署图-拓扑图-ER图-类图-状态图-用例图
  13. unity3d显示c4d材质_纯干货:C4D从初学者到精通,其实很简单
  14. FMI飞马网 | AI人工智能/大数据/Database/Linear Algebra/Python/机器学习/Hadoop 有哪些书籍?福利可下载!
  15. php octet stream,php 上传excel时,excel mime-type类型为application/octet-stream,无法通过验证...
  16. PMP备考大全:经典题库(敏捷管理第4期)
  17. matlab中均线交易策略,高胜率交易策略,期货双向网格交易法
  18. 原厂PW4203降压型1-3节锂电池充电芯片
  19. Activiti的基本使用
  20. excel导出access_将Access 2003报表导出到Excel电子表格中

热门文章

  1. 《Scrum实战》第3次课【富有成效的每日站会】作业汇总
  2. s数据结构替换子表java版,数据结构(Java版)-习题解答与实验指导
  3. 协方差矩阵的定义性质与python实现
  4. 秦九韶算法的思想与解多项式算法时间比较附代码
  5. 【Word】公式“大括号”中的内容对齐
  6. 这是一篇随笔 hello world
  7. 焦作大学对口计算机分数线,焦作大学录取分数线|2021焦作大学分数线|2021年焦作大学高考分数线|2021年焦作大学招生计划录取人数...
  8. java地铁最短距离_地铁线路最短路径
  9. 在面试中脱颖而出的流程全解
  10. 程序员为啥更赚钱?用Python做副业增长上万,躺赚