哪家网站开发好,有关学校网站建设策划书,代做毕设网站,最好看免费视频当我们想要封装一些自定义功能给别人使用的时候#xff0c;创建Spring Boot Starter的形式是最好的实现方式。如果您还不会构建自己的Spring Boot Starter的话#xff0c;本文将带你一起创建一个自己的Spring Boot Starter。
快速入门 创建一个新的 Maven 项目。第三方封装的…当我们想要封装一些自定义功能给别人使用的时候创建Spring Boot Starter的形式是最好的实现方式。如果您还不会构建自己的Spring Boot Starter的话本文将带你一起创建一个自己的Spring Boot Starter。
快速入门 创建一个新的 Maven 项目。第三方封装的命名格式是 xxx-spring-boot-starter 例如didispace-spring-boot-starter。 编辑pom.xml添加spring-boot-autoconfigure和spring-boot-starter依赖
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure/artifactId/dependency
/dependencies创建一个用 Configuration 注释的配置类在这里您可以使用Bean来创建使用ConditionalOnClass、ConditionalOnMissingBean等条件注释来控制何时应用配置。
Configuration
ConditionalOnClass(MyFeature.class)
ConditionalOnProperty(prefix myfeature, name enabled, matchIfMissing true)
public class MyFeatureAutoConfiguration {BeanConditionalOnMissingBeanpublic MyFeature myFeature() {return new MyFeature();}
}在src/main/resources/META-INF目录下创建spring.factories文件并在org.springframework.boot.autoconfigure.EnableAutoConfiguration关键字下列出您的自动配置类比如
org.springframework.boot.autoconfigure.EnableAutoConfiguration\
com.didispace.myfeature.MyFeatureAutoConfiguration该配置的作用是让Spring Boot应用在引入您自定义Starter的时候可以自动这里的配置类。 注意Spring Boot 2.7开始不再推荐使用spring.factories而是改用/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件内容直接放需要自动加载配置类路径即可。这个变更具体可见之前的这篇文章《Spring Boot 2.7开始spring.factories不推荐使用了》: https://www.didispace.com/article/spring-boot/spring-boot-factories-deprecations.html 验证测试
在制作Spring Boot Starter的时候一定记得使用单元测试来验证和确保自动化配置类在任何条件逻辑在启动器下能够按照正确的预期运行。
创建单元测试
使用SpringBootTest加载完整的应用程序上下文并验证启动程序是否正确配置了 Bean 和属性。
SpringBootTest(classes TestApplication.class)
public class MyStarterAutoConfigurationTest {Autowired(required false)private MyService myService;Testpublic void testMyServiceAutoConfigured() {assertNotNull(myService, MyService should be auto-configured);}
}覆盖不同的配置
如果有不同的配置方案那么还需要使用TestPropertySource或DynamicPropertySource覆盖属性以测试不同配置下的情况。
或者也可以直接简单的通过SpringBootTest中的属性来配置比如下面这样
SpringBootTest(properties my.starter.custom-propertycustomValue)
public class MyStarterPropertiesTest {Value(${my.starter.custom-property})private String customProperty;Testpublic void testPropertyOverride() {assertEquals(customValue, customProperty, Custom property should be overridden by SpringBootTest);}
}覆盖Conditional的不同分支
如果您的启动器包含条件配置比如ConditionalOnProperty、ConditionalOnClass等注解那么就必须编写测试来覆盖所有条件以验证是否已正确。
比如下面这样
SpringBootTest(classes {TestApplication.class, MyConditionalConfiguration.class})
ConditionalOnProperty(name my.starter.enable, havingValue true)
public class MyStarterConditionalTest {Autowiredprivate ApplicationContext context;Testpublic void conditionalBeanNotLoadedWhenPropertyIsFalse() {assertFalse(context.containsBean(conditionalBean),Conditional bean should not be loaded when my.starter.enable is false);}
}为了覆盖不同的条件分支我们通常还需要使用TestConfiguration注解来有选择地启用或禁用某些自动配置。