Spring Boot Starter是如何产生的?

digest-spring-boot-starter是封装的摘要加密starter,用于对数据提供MD5/SHA加密操作
自定义Starter开发过程
第一步,引入底层依赖

<dependency>
  <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.15</version>
</dependency>

第二步,开发业务逻辑接口与实现类
摘要接口Digest

public interface Digest {
    public String digest(String raw);
}

摘要实现Md5Digest

public class Md5Digest implements Digest {
    @Override
    public String digest(String raw) {
        System.out.println("使用MD5算法生成摘要");
        return DigestUtils.md5Hex(raw);
    }
}

摘要实现ShaDigest

public class ShaDigest implements Digest {
    @Override
    public String digest(String raw) {
        System.out.println("使用SHA256算法生成摘要");
        return DigestUtils.sha256Hex(raw);
    }
}

第三步,开发加载配置用的Settings类

@Component
@ConfigurationProperties(prefix = "digest")
public class Settings {
    private String type;
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }

}

配套在application.properties增加配置

digest.type=md5

第四步,最重要的配置类Config

@Configuration
@EnableConfigurationProperties(Settings.class)
public class Config {
    @Resource
    private Settings settings;

    @Bean
    @ConditionalOnProperty(prefix = "digest", name = "type", havingValue = "md5")
    public Digest md5Digest() {
        System.out.println("Loading Md5Digest object");
        return new Md5Digest();
    }

    @Bean
    @ConditionalOnProperty(prefix = "digest", name = "type", havingValue = "sha")
    public Digest shaDigest() {
        System.out.println("Loading ShaDigest object");
        return new Md5Digest();
    }
}

@Configuration用于定义配置类
@EnableConfigurationProperties(Settings.class) 用于加载设置选项
@Bean写在方法上,用于创建对象,并将该对象载入到Spring IOC容器中.默认方法名就是BeanId
@ConditionalOnProperty注解代表按需加载,相当于IF判断,当条件满足时才会执行该方法.
扩展资料
按需加载提供了多种不同的注解
● @ConditionalOnBean:当容器里有指定Bean的条件下
● @ConditionalOnBean(Digest.class)
● @ConditionalOnClass:当类路径下有指定类的条件下
● @ConditionalOnClass(Digest.class)
● @ConditionalOnExpression:基于SpEL表达式作为判断条件
● @ConditionalOnExpression(“${digest.type}==‘md5’”)
● @ConditionalOnJava:基于JV版本作为判断条件
● @ConditionalOnJndi:在JNDI存在的条件下差在指定的位置
● @ConditionalOnMissingBean:当容器里没有指定Bean的情况下
● @ConditionalOnMissingClass:当类路径下没有指定类的条件下
● @ConditionalOnNotWebApplication:当前项目不是Web项目的条件下
● @ConditionalOnProperty:指定的属性是否有指定的值
● @ConditionalOnProperty(prefix = “digest”, name = “type”, havingValue = “md5”)
● @ConditionalOnResource:类路径是否有指定的值
● @ConditionalOnSingleCandidate:当指定Bean在容器中只有一个,或者虽然有多个但是指定首选Bean
第五步,新建/resources/META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.itlaoqi.digest.conf.Config

在其他工程引用该starter的时候,会自动创造EnableAutoConfiguration对应的类并实例化该对象,这样在目标工程的IOC容器中就会出现md5Digest或者shaDigest对象.
第六步,屏蔽掉pom.xml的spring-boot-maven-plugin插件
因为Spring Boot工程默认构建FatJar,而starter打包时要打标准Jar因此要屏蔽Spring Boot打包插件.
pom.xml

<build>
    <plugins>
        ...
        <!--
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.3.7.RELEASE</version>
            <configuration>
                <mainClass>com.itlaoqi.digest.DigestSpringBootStarterApplication</mainClass>
            </configuration>
            <executions>
                <execution>
                    <id>repackage</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        -->
    </plugins>
</build>

第七步,mvn install 将Starter在本地安装,供其他项目引用.

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的老史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值