SpringBoot详解自定义Stater的应用


Posted in Java/Android onJuly 15, 2022

1、SpringBoot starter机制

SpringBoot由众多Starter组成(一系列的自动化配置的starter插件),SpringBoot之所以流行,也是因为starter。starter是SpringBoot非常重要的一部分,可以理解为一个可拔插式的插件,正是这些starter使得使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动通过classpath路径下的类发现需要的Bean,并织入相应的Bean。

例如,你想使用Reids插件,那么可以使用spring-boot-starter-redis;如果想使用MongoDB,可以使用spring-boot-starter-data-mongodb

2、为什么要自定义starter

开发过程中,经常会有一些独立于业务之外的配置模块。如果我们将这些可独立于业务代码之外的功能配置模块封装成一个个starter,复用的时候只需要将其在pom中引用依赖即可,SpringBoot为我们完成自动装配

3、自定义starter的命名规则

SpringBoot提供的starter以spring-boot-starter-xxx 的方式命名的。官方建议自定义的starter使用xxx-spring-boot-starter 命名规则。以区分SpringBoot生态提供的starter

整个过程分为两部分:

  • 自定义starter
  • 使用starter

首先,先完成自定义starter

(1)新建maven jar工程,工程名为zdy-spring-boot-starter,导入依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>
</dependencies>

(2)编写javaBean

package com.lagou;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@EnableConfigurationProperties(SimpleBean.class) // 开启@ConfigurationProperties
@ConfigurationProperties(prefix = "simplebean")
public class SimpleBean {
    private int id;
    private String name;
    @Override
    public String toString() {
        return "SimpleBean{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

(3)编写配置类MyAutoConfiguration

package com.lagou.config;
import com.lagou.SimpleBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnClass// 注解:当类路径classpath下有指定类的情况,就会进行自动配置
public class MyAutoConfiguration {
    static {
        System.out.println("MyAutoConfiguration init....");
    }
    @Bean
    public SimpleBean simpleBean() {
        return new SimpleBean();
    }
}

(4)resources下创建/META-INF/spring.factories

注意:META-INF是自己手动创建的目录,spring.factories也是手动创建的文件,在该文件中配置自己的自动配置类

SpringBoot详解自定义Stater的应用

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.lagou.config.MyAutoConfiguration

4、使用自定义starter

(1)导入自定义starter的依赖

<dependency>
    <groupId>com.lagou</groupId>
    <artifactId>zdy-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

(2)在全局配置文件中配置属性值

simplebean.id=1
simplebean.name=自定义starter

(3)编写测试方法

//测试自定义starter
@Autowired
private SimpleBean simpleBean;
@Test
public void zdyStarterTest(){
    System.out.println(simpleBean);
}

到此这篇关于SpringBoot详解自定义Stater的应用的文章就介绍到这了,更多相关SpringBoot Stater内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Java/Android 相关文章推荐
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
分析Netty直接内存原理及应用
Jun 14 Java/Android
Java如何实现树的同构?
Jun 22 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
死磕 java同步系列之synchronized解析
Jun 28 Java/Android
Java Kafka 消费积压监控的示例代码
Jul 01 Java/Android
JVM之方法返回地址详解
Feb 28 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
Java 超详细讲解hashCode方法
Apr 07 Java/Android
Android中的Launch Mode详情
Jun 05 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
Spring boot实现上传文件到本地服务器
Aug 14 Java/Android
MyBatis XPathParser解析器使用范例详解
Jul 15 #Java/Android
SpringBoot接入钉钉自定义机器人预警通知
Jul 15 #Java/Android
SpringBoot深入分析讲解监听器模式下
Jul 15 #Java/Android
tree shaking对打包体积优化及作用
Jul 07 #Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 #Java/Android
一文了解Java动态代理的原理及实现
Jul 07 #Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 #Java/Android
You might like
PHP MSSQL 存储过程的方法
2008/12/24 PHP
mysql总结之explain
2012/02/27 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python实现子类调用父类的方法
2014/11/10 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
python zip()函数使用方法解析
2019/10/31 Python
Python print不能立即打印的解决方式
2020/02/19 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
实习生自荐信范文
2013/11/13 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
婚内房产协议书范本
2014/10/02 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技