squirrel-spring-boot-starter

本文介绍了Spring Boot Starter的概念及其重要性,详细讲解了自定义Starter的开发步骤,包括新建Maven项目、配置类、自动装配类以及创建spring.factories文件等关键环节。此外,还提到了squirrel-spring-boot-starter的实现过程,包括添加依赖、配置项设定、自动装配、异常处理和状态机后处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring Boot Starter简介

Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。SpringBoot提供的starter以spring-boot-starter-xxx的方式命名的。官方建议自定义的starter使用xxx-spring-boot-starter命名规则。以区分SpringBoot生态提供的starter。

二、Starter的开发步骤

  1. 新建Maven项目,在项目的POM文件中定义使用的依赖;
  2. 新建配置类,写好配置项和默认的配置值,指明配置项前缀;
  3. 新建自动装配类,使用@Configuration和@Bean来进行自动装配;
  4. 新建spring.factories文件,指定Starter的自动装配类;

三、squirrel-spring-boot-starter实现过程

1、maven添加依赖

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.squirrelframework</groupId>
        <artifactId>squirrel-foundation</artifactId>
        <version>0.3.8</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

2、新建配置类,写好配置项和默认的配置值,指明配置项前缀。

@Data
@ConfigurationProperties(prefix = "state.machine")
public class StateMachineProperties {

    /**
     * 状态机类的全限定名
     */
    private String clazz;


    /**
     * 是否启动默认配置
     */
    private boolean autoConfig;

}

3、新建自动装配类,使用@Configuration和@Bean来进行自动装配;
,创建builder并注入。

@Configuration
@EnableConfigurationProperties(StateMachineProperties.class)
public class StateMachineConfig {

    @Resource
    private StateMachineProperties stateMachineProperties;

    @Bean
    public UntypedStateMachineBuilder builder() throws ClassNotFoundException {
       if (stateMachineProperties.isAutoConfig()) {
           Class clazz =  Class.forName(stateMachineProperties.getClazz());
           if (clazz == null) {
               throw new SquirrelAutoConfigException("指定状态机类不存在");
           }
           UntypedStateMachineBuilder builder = StateMachineBuilderFactory.create(clazz);
           return builder;
       }
       return null;
    }
}

4、定义配置异常类

public class SquirrelAutoConfigException extends RuntimeException {

    private static final long serialVersionUID = -4606172299202646819L;


    public SquirrelAutoConfigException() {
        super();
    }

    public SquirrelAutoConfigException(String message) {
        super(message);
    }

    public SquirrelAutoConfigException(String message, Throwable cause) {
        super(message, cause);
    }

    public SquirrelAutoConfigException(Throwable cause) {
        super(cause);
    }
}

5、创建状态机后处理类,在创建状态机后注入到Spring中。

@Component
public class StateMachineAutowireProcessor implements SquirrelPostProcessor<StateMachine>, ApplicationContextAware {
    private ApplicationContext applicationContext;

    public StateMachineAutowireProcessor() {
        // 注册后处理器
        SquirrelPostProcessorProvider.getInstance().register(StateMachine.class, this);
    }

    @Override
    public void postProcess(StateMachine stateMachine) {
        Preconditions.checkNotNull(stateMachine);
        // 将状态机注入到Spring
        AutowireCapableBeanFactory autowireCapableBeanFactory = applicationContext.getAutowireCapableBeanFactory();
        autowireCapableBeanFactory.autowireBean(stateMachine);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

6、新建spring.factories文件,指定Starter的自动装配类,spring.factories文件位于resources/META-INF目录下,需要手动创建;
org.springframework.boot.autoconfigure.EnableAutoConfiguration后面的类名说明了自动装配类,如果有多个 ,则用逗号分开;

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  org.squirrelframework.foun

7、application.yml增加默认配置

state:
  machine:
    auto-config: false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值