如何封装springboot的starter(第一天)

mac2022-06-30  124

--为啥要封装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

相关资源:Spring Boot手动封装starter
最新回复(0)