• SpringBoot怎么自定义一个Starter?


    转自:

    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的坐标
    
            
                com.java265
                message-spring-boot-starter
                0.0.1-SNAPSHOT
            
    
    配置文件中配置相关的信息
    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!,发送一封飞书信息");
        }
    }
  • 相关阅读:
    【精品】pinia 基于插件pinia-plugin-persist的 持久化
    【深度学习】Beam Search原理和实现、闲聊机器人优化
    ES7+知识点整理使用
    平面设计实验七 制作立体系统设置图标
    C#关键字汇总
    vue 表单当用户修改字段,点击关闭弹窗时,检测用户是否有修改
    马来西亚农村致富经 丰收节贸促会-艾迪:跨境电商中国样本
    二十一、学习Lua 面向对象
    WorkPlus Meet私有化部署视频会议,打造更安全的沟通体验
    java-net-php-python-ssm大学英语阅读大赛管理系统计算机毕业设计程序
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/128011301