如何封装springboot的starter

--为啥要封装starter
--如何封装
--测试

为啥要封装starter

springboot的starter开箱即用,只需要引入依赖,就可以帮你自动装配bean,这样可以让开发者不需要过多的关注框架的配置。

如何封装

新建SpringBoot项目,引入以下依赖包到pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>

ps: 官方的starter命名规范为:spring-boot-starter-{name}
非官方的starter命名规范为:{name}-spring-boot-starter

编写Service类


/**
 * 字符串拼接类
 */
public class WrapService extends WrapServiceProperties{

    private String str1;

    public WrapService(String str1){
        this.str1 = str1;
    }

    public String wrap(String newWord){
        return newWord + str1;
    }
}

编写配置文件读取类

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties("example.config")
public class WrapServiceProperties {

    private String str1;

    public String getStr1() {
        return str1;
    }

    public void setStr1(String str1) {
        this.str1 = str1;
    }
}

这里的“example.config”指的是application.xml或application.yml中配置的属性的前缀,WrapServiceProperties类里面的属性会拼接到前缀上,即是完整的配置,例如这里的配置就是 example.config.str1 = xxx

编写自动配置类

import com.tjm.service.WrapService;
import com.tjm.service.WrapServiceProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnClass(WrapService.class)
@EnableConfigurationProperties(WrapServiceProperties.class)
public class AutoConfigure {

    @Autowired
    private WrapServiceProperties properties;

    @Bean
    @ConditionalOnMissingBean(WrapService.class)
    @ConditionalOnProperty(prefix = "example.show", value="enabled", havingValue = "true")
    WrapService starterService () {
        return new WrapService(properties.getStr1());
    }
}

对以上用到的注解解释下:

1. @ConditionalOnClass,当classpath下发现该类的情况下进行自动配置。
2. @ConditionalOnMissingBean,当Spring Context中不存在该Bean时。
3. @ConditionalOnProperty(prefix = "example.show",value = "enabled",havingValue = "true"),当配置文件中example.show.enabled=true时。

以下为SpringBoot中所有@Conditional注解和作用

@ConditionalOnBean:当容器中有指定的Bean的条件下
@ConditionalOnClass:当类路径下有指定的类的条件下
@ConditionalOnExpression:基于SpEL表达式作为判断条件
@ConditionalOnJava:基于JVM版本作为判断条件
@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置
@ConditionalOnMissingBean:当容器中没有指定Bean的情况下
@ConditionalOnMissingClass:当类路径下没有指定的类的条件下
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件下
@ConditionalOnProperty:指定的属性是否有指定的值
@ConditionalOnResource:类路径下是否有指定的资源
@ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean @ConditionalOnWebApplication:当前项目是Web项目的条件下  

添加spring.factories

在resource/META-INF/下面创建spring.factories文件,内容为:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.tjm.springbootstartersample.AutoConfigure

至此已经完成starter的开发,运行 mvn:install 打包。

测试

引入starter依赖

<dependency>
            <groupId>com.ltc</groupId>
            <artifactId>sample-spring-boot-starter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>

修改配置文件

在application中添加以下配置:

example.show.enabled=true
example.config.str1=youxiu

使用JUnit进行单元测试

@Autowired
    private WrapService wrapService;

    @Test
    public void wrapServiceTest() {
        String str = wrapService.wrap("222222222333333333");
        System.out.println(str);
    }

输出:222222222333333333youxiu

好,开发的第一个starter完成~

参考:https://www.cnblogs.com/yuansc/p/9088212.html

原文地址:https://www.cnblogs.com/pain-first/p/11457933.html

时间: 2024-10-16 20:12:40

如何封装springboot的starter的相关文章

手撸一个SpringBoot的Starter,简单易上手

前言:今天介绍一SpringBoot的Starter,并手写一个自己的Starter,在SpringBoot项目中,有各种的Starter提供给开发者使用,Starter则提供各种API,这样使开发SpringBoot项目变得简单.实际上Starter简单来说就是Spring+SpringMVC开发的.话不多说开始撸代码 1.创建项目 首先在idea中创建SpringBoot项目,并首先创建一个BeautyProperties类,代码代码如下: package com.mystarter; im

springboot的starter

概述 springboot的starter用来引入其他的第三方依赖,提供开箱即用的效果,避免了之前需要一个一个依赖添加的繁琐过程,非常受现代Java开发人员所喜爱,像从前那种配置个springmvc框架都要一整天功夫的情况来说,确实比较快捷.但是,我认为,搭建框架的时间跟一个项目的整体开发时间跟相比来说,可以说占了非常非常小的比重,简直可以忽略不计.在这个追求快速迭代的编程年代,广大Java开发者确实也比较喜欢这种方式. 实现一个springboot的starter 定义Properties类

springboot自定义starter

1,创建一个空工程 2,new一个Modules  ---------------- maven (启动器) : springboottest-spring-boot-starter 3,new一个Modules  ---------------- spring(做自动配置的): springboottest-spring-boot-starter-autoconfigurer 4,启动器pom文件中引入自动配置模块: <!--启动器--> <dependencies> <!

dockerfile 封装springboot小项目,并导出

1.本次镜像的基础镜像是:https://www.cnblogs.com/JoeyWong/p/9173265.html 2.将打包好的项目文件放在与Dockerfile同级的目录下 3.Dockerfile 如下: # Base os image FROM centos:jdk8 MAINTAINER Joey <your email> LABEL Description="This image is javaweb images." Version="1.0&

SpringBoot编写自定义的starter

在之前的文章中,我们分析过SpringBoot内部的自动化配置原理和自动化配置注解开关原理. 我们先简单分析一下mybatis starter的编写,然后再编写自定义的starter. mybatis中的autoconfigure模块中使用了一个叫做MybatisAutoConfiguration的自动化配置类. 这个MybatisAutoConfiguration需要在这些Condition条件下才会执行: @ConditionalOnClass({ SqlSessionFactory.cla

【springboot】之starter pom

SpringBoot针对不同业务提供了不同的starter pom,根据springboot版本不同可能有差异. spring-boot-starter springboot核心starter ,包括自动配置,日志,yaml配置文件的支持  spring-boot-starter-actuator 准生产特性,用来监控和管理应用 spring-boot-starter-remote-shell 提供基于ssh协议的监控和管理 spring-boot-starter-amqp 使用spring-r

SpringBoot编写自定义Starter

根据SpringBoot的Starter编写规则,需要编写xxxStarter依赖xxxAutoConfigurer,xxxStarter是一个空的jar,仅提供辅助性的依赖管理,引入其他类库 1.建立一个empty工程,建立一个普通maven模块xxxStarter,建立一个SpringBoot模块xxxAutoConfigurer,前者依赖后者 2.xxxAutoConfigurer: 新建:HelloService: public class HelloService { private

小D课堂【SpringBoot】常用Starter介绍和整合模板引擎Freemaker、thymeleaf

========7.SpringBoot常用Starter介绍和整合模板引擎Freemaker.thymeleaf 4节课========================= 1.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-starter

SpringBoot内置的各种Starter是怎样构建的?--SpringBoot源码(六)

注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 温故而知新 本篇接 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五) 温故而知新,我们来简单回顾一下上篇的内容,上一篇我们分析了SpringBoot外部配置属性值是如何被绑定到XxxProperties类属性上的相关源码,现将外部属性绑定的重要步骤总结如下: 首先是@EnableConfigurationProperties注解import了EnableConfigur