手写一个Spring Boot Starter
今天和大家分享Spring Boot的自动装配原理,并手写一个Starter加深对Spring Boot的理解。
众所周知,Spring Boot为了简化开发,省去了Spring中很多的XML文件。为了理解Spring Boot中自动装配的原理,今天我们基于这个机制自己动手实现一个Starter组件。
项目结构
步骤
- 新建一个名为:
redis-spring-boot-starter
的Maven项目 - 添加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>
- 定义属性,实现在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;}
}
- 定义需要自动装配的配置类
@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);}
}
- 在
resource
文件夹下新建META-INF/spring.fatories
文件,使Spring Boot程序可以扫描文件完成自动装配
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jonssonyan.config.RedissonAutoConfiguration
- 打包成jar包
- 在其他项目引入当先依赖
<dependency><groupId>com.jonssonyan</groupId><artifactId>redis-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version></dependency>
- 在
properties
中配置host等RedisProperties
中定义的属性
总结
通过一个简单的例子,让我们加深理解Spring Boot的自动装配原理,让我们对Spring Boot有个更深的理解。
手写一个Spring Boot Starter相关推荐
- zookeeper springboot_摊牌了!我要手写一个“Spring Boot”
❝ 目前的话,已经把 Spring MVC 相关常用的注解比如@GetMapping .@PostMapping .@PathVariable 写完了.我也已经将项目开源出来了,地址:https:// ...
- 摊牌了!我要手写一个“Spring Boot”
目前的话,已经把 Spring MVC 相关常用的注解比如@GetMapping .@PostMapping .@PathVariable 写完了.我也已经将项目开源出来了,地址:https://gi ...
- 一个项目有两个pom_实现一个Spring Boot Starter超简单,读 Starter 源码也不在话下...
Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置.不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置 ...
- 实现一个 Spring Boot Starter 原来如此简单,读 Starter 源码也不在话下
我是风筝,公众号「古时的风筝」,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者.现已转行程序员鼓励师 Spring Cloud 系列文章已经完成,可以 ...
- 从 0 开始手写一个 Spring MVC 框架,向高手进阶
转载自 从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...
- 自己手写一个Spring MVC框架
想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...
- 快速开发一个自定义 Spring Boot Starter ,希望你也会
来源:http://t.cn/Ai9li9fC 众所周知,Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为 ...
- 《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》
目录 Spring Boot Starter项目创建 自动创建客户端 使用 Starter 使用注解开启 Starter 自动构建 使用配置开启 Starter 自动构建 配置 Starter 内容提 ...
- 手把手教你写一个spring IOC容器
本文分享自华为云社区<手把手教你写一个spring IOC容器>,原文作者:技术火炬手. spring框架的基础核心和起点毫无疑问就是IOC,IOC作为spring容器提供的核心技术,成功 ...
- 仿照源码,手写一个自定义 Spring MVC 框架
毫无疑问,Spring 框架目前已经成为 Java 开发的行业标准,Spring MVC 作为其 Web 解决方案,是所有 Java 开发者都必须掌握的基本技能,理解其底层原理,才能更好地应用它进行实 ...
最新文章
- android框架连接mysql_Android:ROOM数据库框架
- 记住密码以及Android 列表的操作
- 分享Leangoo敏捷工具操作视频
- Laravel5.2之Filesystem源码解析(下)
- 基于命令序列的异常行为分析 业界研究现状分析
- ROS和OpenCV的对接cv_bridge
- 基于 Spring 实现管道模式的最佳实践
- android 文件删除命令大全,Android中删除sdcard里文件的命令
- excel删除行 uipath_高级会计师都在用的Excel批处理技巧,祝你早日告别加班
- 链路负载需求及基本原理
- matlab 搜索 nan,MATLAB NaN详解
- 流程图-时序图-架构图,部署图-拓扑图-ER图-类图-状态图-用例图
- unity3d显示c4d材质_纯干货:C4D从初学者到精通,其实很简单
- FMI飞马网 | AI人工智能/大数据/Database/Linear Algebra/Python/机器学习/Hadoop 有哪些书籍?福利可下载!
- php octet stream,php 上传excel时,excel mime-type类型为application/octet-stream,无法通过验证...
- PMP备考大全:经典题库(敏捷管理第4期)
- matlab中均线交易策略,高胜率交易策略,期货双向网格交易法
- 原厂PW4203降压型1-3节锂电池充电芯片
- Activiti的基本使用
- excel导出access_将Access 2003报表导出到Excel电子表格中
热门文章
- 《Scrum实战》第3次课【富有成效的每日站会】作业汇总
- s数据结构替换子表java版,数据结构(Java版)-习题解答与实验指导
- 协方差矩阵的定义性质与python实现
- 秦九韶算法的思想与解多项式算法时间比较附代码
- 【Word】公式“大括号”中的内容对齐
- 这是一篇随笔 hello world
- 焦作大学对口计算机分数线,焦作大学录取分数线|2021焦作大学分数线|2021年焦作大学高考分数线|2021年焦作大学招生计划录取人数...
- java地铁最短距离_地铁线路最短路径
- 在面试中脱颖而出的流程全解
- 程序员为啥更赚钱?用Python做副业增长上万,躺赚