首页 > 其他分享 >快速创建一个spring-boot-starter

快速创建一个spring-boot-starter

时间:2024-03-16 11:46:59浏览次数:20  
标签:String spring boot springframework public class starter

可以使用 spring spiimport 两种方法

1. 导入 starter 依赖

1.1. maven 管理工具

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

1.2. gradle 管理工具

  implementation 'org.springframework.boot:spring-boot-starter'

2. 使用spring spi

2.2. 创建实体类承载数据

@Data
@Builder
public class MyAuthor {
    private String name;
    private String blogSite;
}

2.2. 创建Properties暴露可选项

@Data
@ConfigurationProperties(prefix = "my.author")
public class MyProperties {

    private String name;
    private String blogSite;
}

2.3. 创建容器组件

@EnableConfigurationProperties(MyProperties.class)
public class MyAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean(name = "author")
    public MyAuthor author(MyProperties myProperties) {
        return MyAuthor.builder()
                .name(myProperties.getName())
                .blogSite(myProperties.getBlogSite())
                .build();
    }

}

2.4. 使用spring spi导出配置类

spring spi 的路径

  1. META-INF/spring.factories 文件的 org.springframework.boot.autoconfigure.EnableAutoConfiguration 键下
  2. META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration. imports 文件内 (较新版本的springboot)

由于使用较新版本的springboot,我在 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件写入:

com.example.MyAutoConfiguration

2.5. 使用自动配置的组件

    @Bean
    CommandLineRunner commandLineRunner(MyAuthor author) {
        return args -> {
            System.out.println(author);
        };
    }

3. 使用Import提供可选特性支持

3.1. 创建一个可选的功能特性

可以是 @Configuration, ImportSelector, ImportBeanDefinitionRegistrar, 或者 regular component classes

这里选择 ImportSelector 方式实现相关功能

public class MyConfigurationSelector implements ImportSelector {
    private final static String PACKAGE_NAME = "com.example";

    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        if (importingClassMetadata.getClassName().startsWith(PACKAGE_NAME)) {
            System.out.printf("[%s]bean name: %s\n", PACKAGE_NAME, importingClassMetadata.getClassName());
        }
        return new String[0];
    }
}

3.2. 创建一个注解使用 @Import 注解导入功能组件

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(MyConfigurationSelector.class)
public @interface EnableMyFeature {
}

3.3. 在使用该功能的配置类上使用该注解

例如:

@EnableMyFeature
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

标签:String,spring,boot,springframework,public,class,starter
From: https://www.cnblogs.com/newbieking/p/18076704

相关文章

  • 基于Spring Boot+Vue的校园二手交易平台
    目录一、绪论1.1开发背景1.2系统开发平台1.3系统开发环境二、需求分析2.1问题分析2.2系统可行性分析2.2.1技术可行性2.2.2操作可行性2.3系统需求分析2.3.1学生功能需求2.3.2管理员功能需求2.3.3游客功能需求三、系统设计3.1功能结构图3.2E-R模型3.3数......
  • Spring Schedule定时任务进阶篇(调度器)
    SpringSchedule背后支持多种任务调度方案,如JDKTimer、concurrent包下的ScheduledExecutorService以及Quartz等。Spring通过封装这些底层实现,为开发者提供了统一的接口和配置方式来处理定时任务。接下来通过SpringBoot+数据库来实现根据数据库数据来动态管理我们的定时任务,我这......
  • springboot/java/php/node/python农产品销售系统小程序【计算机毕设】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的迅猛发展,传统农产品销售模式正逐步向线上转移。小程序作为移动互联网的一种轻量级应用,因其开发成本低、传播快、使用方便等特点,成为连接......
  • Spring Bean的生命周期流程
    前言Java中的公共类称之为JavaBean,而Spring中的Bean指的是将对象的生命周期,交给SpringIoC容器来管理的对象。所以Spring中的Bean对象在使用时,无需通过new来创建对象,只需要通过DI(依赖注入),从Spring中取出要使用的对象即可。在Spring框架中单实例Bean的初始化......
  • Spring框架与其他框架(如Struts、Hibernate等)相比有何独特之处?Spring框架的主要优点有
    Spring框架与其他框架(如Struts、Hibernate等)相比有何独特之处?在Spring框架的面试中,可能会被问到的问题涵盖多个方面,包括但不限于以下几个方面:Spring框架的基本理解:请简述一下你对Spring框架的理解。Spring框架的主要优点有哪些?Spring框架与其他框架(如Struts、Hibernate......
  • 解释一下Spring中的IoC(控制反转)和DI(依赖注入)是什么,它们之间有何关系?Spring的Bean的生
    解释一下Spring中的IoC(控制反转)和DI(依赖注入)是什么,它们之间有何关系?在Spring框架中,IoC(控制反转)和DI(依赖注入)是两个核心概念,它们对于实现松耦合和高度可配置的应用程序至关重要。IoC(控制反转):IoC,即控制反转,是一种设计思想,其核心思想是将原本由代码直接操控的对象的调用权交......
  • Global AI Bootcamp 成都站 圆满结束!
    3月10日星期天下午2点「GlobalAIBootcamp2024-成都站」,在成都银泰中心蔚来汽车会议区圆满结束了!本次活动共计吸引了约50名IT行业从业者线下参与,他们分别来自成都各行业的多家IT公司,在会场共同了解和探讨AIGC落地相关话题。活动纪要首先,由微软最有价值专家&MSTeams大......
  • Spring 5.x 源码之旅-59AOP事务的初始化流程一
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • Spring 5.x 源码之旅-59AOP事务的初始化流程二
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • Springboot
    SpringBootSpringBoot集成PageHelper加入依赖<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency>写代码/......