SpringBoot Starter世上最全详解

乔欣 SpringBoot 发布时间:2022-11-23 23:48:25 阅读数:17890 1
下文可以毫不夸张的说--是互联网世界中最全的一篇针对SpringBootStarter详解的文章
此篇文章将从
    SpringBoot Starter的简介
    SpringBoot Starter的使用场景
	SpringBoot Starter的开发示例
	一一分析,如下所示

SpringBoot Starter简介

我们都知道SpringBoot程序的出现,使java web开发变的异常简单, 如:我们无需关心版本问题,无需关注配置问题
因为SpringBoot中有一个重要的开发插件starter
    当我们在maven项目中引入相应的starter时,则会将一些配置bean放入到Spring IOC容器中进行管理
starter就是帮助springboot加载一些配置及将一些bean放入到SpringIOC容器中

Starter的使用场景

我们在开发中进行看见*** web-starter  mybatis***starter等一些starter
他们的功能就是将一些bean注册到SpringIOC容器中,那么Starter常见的使用场景有哪些呢?
starter常见场景如下所示:
    构建通用模块:如:短信、邮件发送模块
    基于AOP技术实现日志切面

创建自定义SpringBoot Starter

Starter命令规范

   每个Starter都会遵循标准的命名规范
      其中分为官方 Starter 的命名方法和自定义 Starter 的命名方式:

SpringBoot 官方命名方式:
   格式:spring-boot-starter-{模块名}
   例:spring-boot-starter-web

自定义命名方式:
  格式:{模块名}-spring-boot-starter
    例:mystarter-spring-boot-starter

Starter创建步骤

SpringBoot自动装配原理:
    1.classpath 中中寻找 resources/META-INF/spring.factories 文件
	2.spring.factories 配置加载 AutoConfigure 类
	  根据@Conditional注解条件
      进行自动配置并将Bean注入Spring IOC容器中 
注意事项:
    starter创建,不需要启动类,即通常创建一个空maven项目

1.创建 Maven 项目

创建空Maven项目

2.添加依赖

 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.wty</groupId>
    <artifactId>email-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--包含自动配置的代码-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <!--非必须:编写配置文件时会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        
        <!--下面就是按照自己项目所需,引入相关依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

编写相关属性配置类

@Data
@ConfigurationProperties(prefix = "email.config")
public class EmailProperties {
    private String username = "";
    private String password = "";
    private String host = "smtp.163.com";
    private Integer port = 88;
}

编写Starter功能类

@Data
public class EmailService {
    private EmailProperties emailProperties;
    /**
     * 模拟发送邮件
     */
    public void sendEmail() {
        System.out.println("Sending email... \n" +
                "username: " + emailProperties.getUsername() + "\n" +
                "password: " + emailProperties.getPassword() + "\n" +
                "host: " + emailProperties.getHost() + "\n" +
                "port: " + emailProperties.getPort());
    }
}

编写自动配置类----核心类

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({EmailService.class})
@EnableConfigurationProperties({EmailProperties.class})
public class EmailAutoConfiguration {

    @Autowired
    private EmailProperties emailProperties;

    @Bean
    @ConditionalOnMissingBean
    public EmailService emailService() {
        EmailService emailService = new EmailService();
        emailService.setEmailProperties(emailProperties);
        return emailService;
    }

}
注解功能说明:
@Configuration:
   注解修饰表示该类为配置类,会注入到容器中,proxyBeanMethods = false 表示使用 Lite 轻量级模式;
@ConditionalOnClass:
   注解表示只有存在 EmailService.class 类时才生效自动配置类;
@EnableConfigurationProperties:
  注解使我们定义的 EmailProperties.class 属性配置类生效。

编写spring.factories文件

在 src/main/resources 下添加 META-INF/spring.factories 文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.java265.starter.config.EmailAutoConfiguration

打包 mvn package


测试

另起项目引入
自定义starter依赖 

<dependency>
    <groupId>com.java265</groupId>
    <artifactId>email-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

在yml配置相应属性(idea中会有相应的提示信息)

email:
  config:
    username: xxx@java265.com
    password: 88888
    host: smtp.java265.com
    port: 25
 

编写测试代码

@RestController
@RequestMapping("/starter")
public class StarterController {

    @Autowired
    private EmailService emailService;

    @GetMapping("/email")
    public void testEmail() {
        emailService.sendEmail();
    }

}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202211/4971.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者