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在本地安装,供其他项目引用.