国家企业信用信息公示系统四川,网站产品优化方案,网站后台管理系统的主要功能,东莞人才市场招聘会当我们想要封装一些自定义功能给别人使用的时候#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不推荐使用了》 验证测试 在制作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注解来有选择地启用或禁用某些自动配置。 小结 本文介绍了两个Spring Boot的进阶内容 如何创建 Spring Boot Starter 如何为 Spring Boot Starter 提供单元测试 文章转载自程序猿DD 原文链接https://www.cnblogs.com/didispace/p/18037231 体验地址引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构