本文通过编写一个自定义 starter 来学习 springboot 的底层原理,帮忙咱们更好的应用 springboot 集成第三方插件
[toc]
步骤一:创立我的项目
世界上最平凡的成就,不是从不失败,而是每次失败后,仍能振作起来。
首先,咱们须要创立一个 Springboot 我的项目。删除启动类,配置文件,增加 META-INF 文件夹和 spring.factories, 最终我的项目构造如下
步骤二:增加依赖
在创立完我的项目后,咱们须要在 pom.xml
文件中增加以下三个依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.7.0</version>
<optional>true</optional>
</dependency>
第一个依赖是 Springboot 的 starter 依赖,第二个依赖是 Springboot 的主动配置依赖。第三个是主动生成帮忙文档和元数据,以帮忙 IDE 主动实现和参数提醒。
步骤三:创立主动配置类
当你感到疲乏时,不要停下脚步,因为你不晓得,下一步可能就是胜利。
主动配置类是整个自定义 starter 的外围局部。咱们须要在主动配置类中实现以下工作:
- 应用
@Configuration
注解将该类标记为配置类。 - 应用
@EnableConfigurationProperties
注解引入属性配置类。 - 应用
@Bean
注解将自定义服务类注入到 Spring 容器中。
上面是一个示例代码:
@Configuration
@EnableConfigurationProperties(YoulaiProperties.class)
public class YoulaiAutoConfiguration {
private final YoulaiProperties properties;
public YoulaiAutoConfiguration(YoulaiProperties properties) {this.properties = properties;}
@Bean
public YoulaiService myService() {return new YoulaiService(properties.toString());
}
}
步骤四:创立属性类
度日如年,光阴似箭,生命短暂而宝贵,让咱们在有生之年做本人想做的事件。
属性类用来存储自定义的配置属性。咱们须要在属性类中实现以下工作:
- 应用
@ConfigurationProperties
注解将该类标记为属性类。 - 应用
prefix
属性指定属性名前缀。 - 定义对应的属性字段,并提供
getter
和setter
办法。
上面是一个示例代码:
@Component
@ConfigurationProperties(prefix = "youlai")
public class YoulaiProperties {
private String bio = "youlai-mall 是基于 Spring Boot 2.7、Spring Cloud 2021 & Alibaba 2021、Vue3、Element-Plus、uni-app 等全栈支流技术栈构建的开源商城我的项目,波及 后端微服务、前端治理、微信小程序和 APP 利用等多端的开发。";
private String serverPath="https://admin.youlai.tech/#/login?redirect=/dashboard";
private String apiPath="https://api.youlai.tech/doc.html#/home";
public String getBio() {return bio;}
public void setBio(String bio) {this.bio = bio;}
public String getServerPath() {return serverPath;}
public void setServerPath(String serverPath) {this.serverPath = serverPath;}
public String getApiPath() {return apiPath;}
public void setApiPath(String apiPath) {this.apiPath = apiPath;}
@Override
public String toString() {
return "YoulaiProperties{" +
"bio='" + bio + '\'' +
", serverPath='" + serverPath + '\'' +
", apiPath='" + apiPath + '\'' +
'}';
}
}
步骤五:创立服务类
服务类是自定义 starter 提供的服务。咱们须要在服务类中定义服务办法,提供的服务。我这演示读取配置文件
上面是示例代码:
public class YoulaiService {
private String config;
public YoulaiService(String config) {this.config = config;}
public void doSomething() {System.out.println("Config value is:" + config);
}
}
步骤六:增加主动配置类到 Springboot 主动配置列表中
为了让 Springboot 可能主动配置咱们的 starter,咱们须要将主动配置类增加到 META-INF/spring.factories
文件中,springboot 启动会读取这个文件,并将他注入到 spring 的容器中,如下所示:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.youlai.springbootstarter.YoulaiAutoConfiguration
除了这种主动拆卸,还有一种被动拆卸,由应用方决定是否须要拆卸,这种只须要定义一个注解就好了
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(YoulaiAutoConfiguration.class)
public @interface EnableYoulai {}
步骤七:打包并公布
实现以上步骤后,咱们能够应用 Idea 将我的项目打包并公布到 Maven 仓库中,我这里演示打包到本地
步骤八:在其余我的项目中应用自定义 starter
胜利不是偶尔的,而是你日复一日致力的后果,永远不要放弃本人的幻想。
在其余 Springboot 我的项目中,咱们只须要在 pom.xml
文件中增加以下依赖即可:
<dependency>
<groupId>com.youlai-learing</groupId>
<artifactId>youlai-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
如果是被动拆卸,则在启动类加上开启注解:
@SpringBootApplication
@EnableYoulai
public class SpringbootStarterConsumerApplication {public static void main(String[] args) {SpringApplication.run(SpringbootStarterConsumerApplication.class, args);
}
}
而后就能够在代码中应用咱们在自定义 starter 中提供的服务了,如下所示:
@Resource
private YoulaiService youlaiService;
@Test
void contextLoads() {youlaiService.doSomething();
}
残缺代码地址:https://gitee.com/youlaiorg/youlai-learning.git
论断
通过本文的介绍,咱们学习到如何编写 Springboot 自定义 starter,并且分明了 springboot 主动拆卸的原理
把握当下,不留遗憾,珍惜身边人,感恩生命中的每一个霎时。
本文由 mdnice 多平台公布