IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot—自定义Starter篇 -> 正文阅读

[Java知识库]SpringBoot—自定义Starter篇

一、自定义Starter 的思路:

  1. 创建一个Maven工程,创建三个模块
  2. 一个模块为demo-app,一个模块为demo-module,一个模块为demo-module-springboot-starter
  3. demo-module中定义一个MyModule类,其中有一个save方法,两个属性:version,age
  4. demo-module-springboot-starter中定义一个自动配置类ModuleAutoConfiguration,关联一个配置类ModuleConfig,这个配置类通过读取properties配置文件中的属性值(通过配置文件注入值)完成对象的初始化
  5. app模块中引入demo-module-springboot-starter模块,不需要初始化Module,只需要在配置文件(application.properties)中配置属性值,即可初始化Moudle,调用save方法

二、具体实现步骤

通过以下步骤实现自定义starter

1、创建一个Maven工程,创建三个模块
在这里插入图片描述
2、环境准备
①、他们都是基于SpringBoot的模块需要在父模块的pom文件中引入如下:

    <!--springboot版本2.5.0-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
        <relativePath/>
    </parent>

    <dependencies>
        <!--web模块mvc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <packaging>pom</packaging>

②、demo-module-springboot-starter还需要额外引入demo-module模块和配置文件注入的2个依赖

    <!--避免属性文件的一个提示-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

     <!--导入demo-module-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>demo-module</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

③、demo-app是我们测试自定义的starter的所以引入我们定义的starter模块即可

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>demo-module-springboot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

3、 demo-module中定义一个MyModule类

package com.sqx.module;

public class MyModule {

    private String version ;

    private Integer age ;

    public void save(){
        System.out.println("my module save ... version:" + version + ",age:" + age);
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

此时我们的deomo-moudle模块的任务就完成了!

4、demo-module-springboot-starter中定义一个自动配置类ModuleAutoConfiguration

@Configuration
@EnableConfigurationProperties(ModuleConfig.class)
public class ModuleAutoConfiguration {

    @Bean
    @ConditionalOnProperty(name = {"com.sqx.version" ,"com.sqx.age"})
    public MyModule myModule(ModuleConfig moduleConfig){
        MyModule myModule = new MyModule();
        myModule.setVersion(moduleConfig.getVersion());
        myModule.setAge(moduleConfig.getAge());
        return myModule ;
    }
}

这个自动配置类会加载我们的ModuleConfig ,然后将其作为参数传入初始化MyMoudle的方法中

5、创建一个配置类ModuleConfig

@ConfigurationProperties(prefix = "com.sqx")
public class ModuleConfig {

    private String version ;

    private  Integer age ;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

我们这个配置类会将applicaiton.properties中由com.sqx开头的配置值注入到我们的这个配置类中,此时我们的第四步中,就可以获取到我们的值,然后通过@Conditional注解的判断将自动配置类初始化到我们的Spring容器当中

6、创建一个配置文件Spring.factories,并进行如下配置

org.springframework.boot.autoconfigure.EnableAutoConfiguration= com.sqx.bootstarter.ModuleAutoConfiguration

这个配置文件的作用是在我们的SpringBoot项目启动的时候,会扫描这个配置文件,将这个配置文件中的配置类,加载到我们的Spring容器当中,其配置内容就是告诉我们的SpringBoot我们的自动配置类的位置!

7、接下来,就是demo-app的编写,创建一个启动类DemoApp,和一个配置文件application.properties

  • 启动类DemoApp
@SpringBootApplication
public class DemoApp {
    public static void main(String[] args) {
        SpringApplication.run(DemoApp.class,args) ;
    }
}
  • application.properties
com.sqx.version=1.0
com.sqx.age=21

8、此时我们的所有步骤都完成了,我们对整个流程做一个梳理:

1、SpringBoot启动的时候,在@EnableAutoConfiguration的作用下,会去加载META-INF下的spring.factories配置文件
2、扫描上述配置文件,将其中的自动配置类注入到Spring容器当中,并且会去加载自动配置类绑定的配置类,这个配置类会去applicaiton.properties中去找到对应的值并且注入
3、通过@Condition判断自动配置类是否生效,如果生效,会将自动配置类中的@Bean加载到我们的Spring容器当中
4、此时我们在demo-app中就获取到MyModule,然后通过自动装配@Autowired获取到,接着调用其中的save方法

9、启动demo-app,进行测试
在这里插入图片描述
以上就是自定义Spring的一个Starter的具体流程 !

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 20:59:25  更:2022-02-14 21:00:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:22:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码