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 相关文章推荐
总结一些Java常用的加密算法
Jun 11 Java/Android
Java用自带的Image IO给图片添加水印
Jun 15 Java/Android
详解java如何集成swagger组件
Jun 21 Java/Android
Java实现聊天机器人完善版
Jul 04 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
SSM项目使用拦截器实现登录验证功能
Jan 22 Java/Android
关于EntityWrapper的in用法
Mar 22 Java/Android
Android自定义ScrollView实现阻尼回弹
Apr 01 Java/Android
Spring Boot 底层原理基础深度解析
Apr 03 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
Apr 08 Java/Android
Java 异步任务计算FutureTask
Apr 28 Java/Android
SpringBoot接入钉钉自定义机器人预警通知
Jul 15 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数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
高等教育学自荐书范文
2014/02/10 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
回复函范文
2015/07/14 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
python游戏开发Pygame框架
2022/04/22 Python