年轻人的第一个自定义 Spring Boot Starter!

简介: 年轻人的第一个自定义 Spring Boot Starter!

image.png陆陆续续,零零散散,栈长已经写了几十篇 Spring Boot 系列文章了,其中有介绍到 Spring Boot Starters 启动器,使用的、介绍的都是第三方的 Starters ,那如何开发一个自己的 Spring Boot Starter 呢?


下面带大家开发一个年轻人的第一个 Spring Boot Starter!


不知道 Starters 为何物的请进这个传送门===>Spring Boot Starters 启动器,看完有了学习基础,我们再继续下面的自定义 Starter 实战!


一、自定义 Starter 必备组件

一个完整的 Spring Boot Starter 需要包含以下组件:


包含自动配置代码的自动配置模块;参考:Spring Boot自动配置原理、实战。


Starter模块提供对自动模块的依赖关系,和相关依赖库,以及任何需要用到的依赖。简而言之,就是,添加一个 Starter 就应该提供使用该 Starter 所需的一切;


二、创建一个自定义Starter

怎么创建 Spring Boot 项目就不说了,之前也分享过,参考:年轻人的第一个 Spring Boot 应用!。


这个自定义 Starter 就实现一个根据属性的值是否配置Bean。


1、创建自动配置类

package cn.javastack.springboot.starter.config;
import cn.javastack.springboot.starter.service.TestService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnProperty(prefix = "javastack.starter", name = "enabled", havingValue = "true")
public class TestServiceAutoConfiguration {
    @Bean
    public TestService testService() {
        return new TestService();
    }
}

这个自动配置类很简单,就是根据是否有 javastack.starter.enabled=true 这个参数的值再配置一个Bean。

TestService示例如下:

package cn.javastack.springboot.starter.service;
public class TestService {
    public String getServiceName() {
        return "Java技术栈";
    }
}

这个类就有一个方法 getServiceName,它就返回一个字符串:Java技术栈

2、允许自动配置

创建 META-INF/spring.factories 文件,添加这个允许自动配置的类。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.javastack.springboot.starter.config.TestServiceAutoConfiguration

三、测试这个自定义Starter

上面的自定义 Starter 项目建好后,可以来测试一下它是否生效了。


一般是把它打成 jar 包上传到 Maven 仓库,供其他同事调用,这里我们本报打完包之后再引用它。


1、添加依赖

新建一个 Spring Boot 测试项目,添加这个自定义 Starter 依赖,Maven 依赖如下:

<dependencies>
    <dependency>
        <groupId>cn.javastack</groupId>
        <artifactId>javastack-spring-boot-starter</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

2、添加测试方法

1.
package cn.javastack.springboot.starter.sample;
import cn.javastack.springboot.starter.service.TestService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
/**
 * 微信公众号:Java技术栈
 */
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
    @Bean
    public CommandLineRunner commandLineRunner(TestService testService) {
        return (args) -> {
            System.out.println(testService.getServiceName());
        };
    }
}

这个方法的作用是,项目启动后,调用 TestService 的实例方法,输出方法的值。


关于 CommandLineRunner 有不懂的可以看这篇文章:Spring Boot Runner 启动器。


3、开启配置

我们知道这个自定义 Starter 中需要有 javastack.starter.enabled=true 这个参数的值的,所以我们在 application.yml 配置文件中添加这个配置:


javastack:
  starter:
    enabled: true

4、运行测试

运行 Application 类的 main 方法,最后会输出结果:Java技术栈。

当我们把配置改为:

javastack:
  starter:
    enabled: false

此时,运行报错,因为没有这个实例啊,自动配置类只有为 true 时才会配置。


四、总结

本章栈长简单演示了如何自定义一个 Spring Boot Starter,根据某个参数的值来决定是否自动配置,其实还可以根据是否有某个类、某个Bean……等,可以看下《Spring Boot 最核心的 25 个注解》这篇文章对应的 ConditionOnXXX 系列注解。


其实了解了 Spring Boot 自动配置的原理,自定义一个 Starter 并不难,你可以在这个实例基础上灵活扩展。


本文完整的代码实例 Github 地址:


https://github.com/javastacks/spring-boot-best-practice


赶紧关注加星吧,已经更新一大堆教程了,后续这个教程会持续更新……


相关文章
|
9天前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
9天前
|
Java Spring
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
1天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
8 2
|
2月前
|
Java 数据安全/隐私保护 Spring
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
|
2月前
|
监控 安全 Java
【开发者必备】Spring Boot中自定义注解与处理器的神奇魔力:一键解锁代码新高度!
【8月更文挑战第29天】本文介绍如何在Spring Boot中利用自定义注解与处理器增强应用功能。通过定义如`@CustomProcessor`注解并结合`BeanPostProcessor`实现特定逻辑处理,如业务逻辑封装、配置管理及元数据分析等,从而提升代码整洁度与可维护性。文章详细展示了从注解定义、处理器编写到实际应用的具体步骤,并提供了实战案例,帮助开发者更好地理解和运用这一强大特性,以实现代码的高效组织与优化。
57 0
|
2月前
|
存储 Java API
|
2月前
|
安全 搜索推荐 Java
|
2月前
|
Java UED
基于SpringBoot自定义线程池实现多线程执行方法,以及多线程之间的协调和同步
这篇文章介绍了在SpringBoot项目中如何自定义线程池来实现多线程执行方法,并探讨了多线程之间的协调和同步问题,提供了相关的示例代码。
266 0
|
2月前
|
Java 数据安全/隐私保护
SpringBoot 自定义初始化任务 Runner
SpringBoot 自定义初始化任务 Runner
11 0
|
JSON 前端开发 Java
SpringBoot自定义异常,优雅解决业务逻辑中的错误
SpringBoot自定义异常,优雅解决业务逻辑中的错误
6066 0
SpringBoot自定义异常,优雅解决业务逻辑中的错误
下一篇
无影云桌面