SpringBoot怎么自定义一个Starter?
下文笔者讲述SpringBoot自定义一个starter功能简介说明,如下所示
SpringBoot starter简介
Starter是Spring Boot中的一个非常重要的概念 Starter相当于模块 它能将模块所需的依赖整合起来并对模块内的Bean根据环境(条件)进行自动配置 使用者只需要依赖相应功能的Starter 无需做过多的配置和依赖 Spring Boot就能自动扫描并加载相应的模块 SpringBootStarter功能总结: 整合这个模块需要的依赖库 提供对模块的配置项给使用者 并可以对配置项提供默认值 使得使用者可以不指定配置时提供默认配置项值 也可以根据需要指定配置项值 提供自动配置类对模块内的Bean进行自动装配 例: 在Maven的pom.xml中 加入spring-boot-starter-web后,项目就可支持Spring MVC例:
建立用户发送消息的服务 如:email,飞书发送信息
starter创建 为starter取名 {xxxx}-spring-boot-starter 如mybatis-spring-boot-starter 本篇测试信息,我们使用 message-spring-boot-starter 第一步:自定义配置信息类--获取yml中的配置信息 @ConfigurationProperties(prefix = "message") @Data public class MessageProperties { /** * 邮箱消息 */ private MessageConfigInfo email = new MessageConfigInfo(); /** * 飞书消息 */ private MessageConfigInfo feishu = new MessageConfigInfo(); @Data public static class MessageConfigInfo { /** * 用户名 */ private String userName; /** * 密码 */ private String passWord; /** * 秘钥 */ private String key; /** * 消息发送API */ private String apiUrl; } } ---发送消息代码实现 接口定义 public interface SendMessageService { Boolean sendMessage(String message); } 模拟接口实现 public class SendEmailMessageServiceImpl implements SendMessageService { private MessageProperties messageProperties; public SendEmailMessageServiceImpl(MessageProperties messageProperties) { this.messageProperties = messageProperties; } @Override public Boolean sendMessage(String message) { System.out.println(messageProperties.toString() + "发送邮件,发送内容为:" + message); return true; } } public class SendFeishuMessageServiceImpl implements SendMessageService { private MessageProperties messageProperties; public SendFeishuMessageServiceImpl(MessageProperties messageProperties) { this.messageProperties = messageProperties; } @Override public Boolean sendMessage(String message) { System.out.println(messageProperties.toString() + "发送邮件,发送内容为:" + message); return true; } } 自动配置类 @EnableConfigurationProperties(value = MessageProperties.class) @Configuration public class MessageAutoConfiguration { /** * 给发送邮件的实现类,注入配置信息 * @param messageProperties * @return */ @Bean public SendEmailMessageServiceImpl emailMessageConfig(MessageProperties messageProperties){ return new SendEmailMessageServiceImpl(messageProperties); } /** * 给发送飞书的实现类,注入配置信息 * @param messageProperties * @return */ @Bean public SendFeishuMessageServiceImpl feishuMessageConfig(MessageProperties messageProperties){ return new SendFeishuMessageServiceImpl(messageProperties); } } 新建spring.factories文件,并放入位置 resources/META-INF目录下 (如果没有spring.factories文件,需手动新建) org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.java265.message.config.MessageAutoConfiguration 编写完之后,mvn install即可
使用starter 1.引入 自定义starter的坐标 <dependency> <groupId>com.java265</groupId> <artifactId>message-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> 配置文件中配置相关的信息 message: email: username: Adeal password: 123456 key: 8784545454454 api-url: http://java265.com feishu: user-name: Adeal pass-word: 123456 key: 8784545454454 api-url: http://java265.com --测试 @SpringBootApplication public class TeachApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(TeachApplication.class, args); SendEmailMessageServiceImpl emailMessageService = context.getBean(SendEmailMessageServiceImpl.class); emailMessageService.sendMessage("你好,Starter!,发送一封邮件 java265.com \n\n"); SendFeishuMessageServiceImpl feishuMessageService = context.getBean(SendFeishuMessageServiceImpl.class); feishuMessageService.sendMessage("你好,Starter!,发送一封飞书信息"); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。