实现自定义的springboot start

spring boot 中有很多的start 比如 mybatis-spring-boot-starter ,就可以引入mybatis 的依赖,其实我们可以构建自己的start

本文代码地址

链接:https://pan.baidu.com/s/1ACSxwvf-lkDAcE9QB5jyww
提取码:5hfy

sring boot start 分析

就上述的 mybatis 的start来看,看一下我们引入的依赖
在这里插入图片描述
重点注意下 红圈圈里的 三个文件
首先看 spring.factories 这个文件
在这里插入图片描述
可以看到 参数就是 下面的 这个 MybatisAutoConfiguration.class 这个spring.factories 文件也就是如此,他会引导springboot 哪个是自动配置类

下面看一下 另一个文件 MybatisProperties.class
在这里插入图片描述
文件内容很多,就不全部截取了如果你对mybatis配置熟悉的话,应该能发现 这里所有的项,就是之后我们在 properties 配置文件中配置的项,而 @ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX) 定义了前缀
举个例子
以前我们会在propeeties 文件中写

mybatis.mapperLocations=classpath:mapping/*.xml

来指定mybatis 的xml文件的位置
注意下 mybatis 正是这个 MybatisProperties@ConfigurationProperties 配置的前缀
mapperLocations 就是 我们这个 MybatisProperties.class 的其中一个成员变量 !

最后来看 MybatisAutoConfiguration.class
在这里插入图片描述
上面@EnableConfigurationProperties(MybatisProperties.class) 引入了我们刚才讲的那个配置文件

之后就可以利用这个配置文件里的参数实例化 一个对象完成整个mybatis 的创建。

现在来看最后一个问题刚开始的入口 spring.factories 文件是哪里来的呢,
我们定位到我们的启动类 ,上面有一个 @SpringBootApplication 注解,点进去
之后是一个 @EnableAutoConfiguration 注解 在点进去
在这里插入图片描述
你可以看到一个叫做 AutoConfigurationImportSelector.class 的类,就是这里了 再点进去,在这个类的源码里搜索
spring.factories

在这里插入图片描述
看到这句话了吗,原来springboot 会去 META-INF 目录下找到这个spring.factories文件!

到现在为止我们已经理清楚了整个start 加载的流程:

1、去META-INF 目录下找到这个spring.factories文件
2、通过 文件内指定的类路径,找到 配置类
3、配置类加载进 属性类
4、配置类通过属性类的参数构建一个新的bean

实现自己的start

明白了原理,就可以依葫芦画瓢了,我们现在就按照这个mybatis 的格式,自己写一个 redis 的 start

由于spring.factories 是指定入口的 我们放在最后写
下面创建一个普通的springboot 工程 什么都不用加

1. 编写属性类

@ConfigurationProperties(prefix = "redis")
public class RedisProperties {
    private Integer port;
    private String host;
    private String password;
    private int index;
	//省略了get set 方法
}

之后我们就可以在properties 中 使用 redis.port=这样子来指定参数了

2. 编写配置类

@Configuration
//只有当Jedis 存在的时候 才执行,就是说一定要引入了Jedis的依赖才会执行这个配置
@ConditionalOnClass(Jedis.class)
//引入属性类
@EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfiguration {
    @Bean
    //当这个bean不存在的时候才执行,防止重复加载bean
    @ConditionalOnMissingBean
    public Jedis jedis(RedisProperties redisProperties) {
        Jedis jedis = new Jedis(redisProperties.getHost(), redisProperties.getPort());
        jedis.auth(redisProperties.getPassword());
        jedis.select(redisProperties.getIndex());
        return jedis;
    }
}

3. 编写spring.factories 文件

在这里插入图片描述
在resources 目录下创建入口文件,编写内容

org.springframework.boot.autoconfigure.EnableAutoConfiguration=xyz.xiezihao.myjedis.RedisAutoConfiguration

ok,现在代码已经全部写好了 mvn install 打到本地仓库

测试

然后我们新建一个springboot项目,在pom中加入依赖

	<dependency>
            <groupId>xyz.xiezihao</groupId>
            <artifactId>redis-start</artifactId>
            <version>0.0.1-SNAPSHOT</version>
       </dependency>

然后写一个测试文件

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestStartApplicationTests {
    @Resource
    private Jedis jedis;
    @Test
    public void contextLoads() {
        jedis.set("zhu","大肥猪");
        String zhu = jedis.get("zhu");
        System.out.println(zhu);
    }
}

如果你能成功输出 大肥猪 的话就成功了!

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值