Java教程

SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

本文主要是介绍SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
需求描述   当我们想要利用SpringBoot封装一套组件并发布给第三方使用时,我们就不得不考虑我们的组件能否被使用者正确引入使用,本文章讲解的是项目打包成 jar 包后 Spring 配置类未扫描、未注册Bean的解决方案。

解决方案

  此处提供三种解决方案,友好型依次提升。
① 使用者手动配置 basePackages
② 使用者通过注解方式启用配置
③ SpringBoot 主动发现
  目前以两个项目来作为测试:  
springboot_jar_third:它将作为第三方组件以jar包的方式注入到下面的项目中
springboot_jar_import:服务由该项目启动
  第一种:使用者手动配置 basePackages (对组件开发者最为简单,对使用者最为繁琐) 使用此方式,对组件开发者最为简单,不需要对项目进行任何其余配置,我们只需要在测试环境使用功能后直接打包发布。但是使用者使用时需要手动配置 basePackages,假设我们的组件的包基础为:“com.example”, 这个jar包中只有一个请求地址/hello ,如果想在另一个项目中引用,可以将这个项目打成jar包(mvn clean install),加入另一个项目的pom文件中 springboot_jar_third项目: 0 springboot_jar_import项目中添加springboot_jar_third jar包:
<dependency> 
    <groupId>com.example</groupId>             
    <artifactId>springboot_jar_third</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</dependency>    

 

如果想要springboot_jar_import项目启动时使用springboot_jar_third jar中的hello请求方法,则需要扫描springboot_jar_third中的com.example基础包, 0 配置方式: 在SpringBoot启动类或能被Spring发现的 Configuration 类上增加
@ComponentScan(basePackages={"com.example"})

 

通过此方式配置后,Spring会在启动时扫描 com.example 这个包,我们的组件自然而然也会被注册为Spring Bean 此时启动项目SpringbootJarImportApplication,输入localhost:8080/hello,便可以获取到该请求     第二种方式:通过注解方式引入(在特定的需求环境使用) 第一种方式需要使用者手动进行 basePackages 配置,当使用者忘记配置时,我们的组件则不会生效,第二种雷同,只不过配置方式有变 首先来看看我们项目(组件)的文件结构   0 ExampleConfig则为我们主要配置类,相当于我们组件的入口,代码如下
package com.example.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.example")
public class ExampleConfig {
}

 

其中,第一行是声明为一个配置类 第二行为设置自动扫描包,让Spring能够发现我们封装的组件的其他 Spring Bean   到这儿还远远没完,因为我们的目的是使用者通过注解才能发现该配置类,所以我们还需要建立一个注解类,此处取名为 EnableExampleConfig,我们来看看EnableExampleConfig中的代码:
package com.example.config;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({ExampleConfig.class})
public @interface EnableExampleConfig {
}

 

关键代码为第 4 行,此行是代码导入EnableExampleConfig 类,也就是我们前面的配置类。 自此,我们的任务就完成了,剩下的步骤就交于使用者了。 当使用者使用我们组件,需要在能被Spring发现到的 Configuration 上使用我们的注解,代码如下: 0 这样,当用户启动程序时,Spring就会将 ExampleConfig 注册到Bean,然后读取ExampleConfig中的 @ComponentScan 注解,就实现了我们组件全包被Spring覆盖   第三种:这也是本文介绍的最后一种(Spring Boot Starter),对组件开发者和使用者都比较友好,故推荐使用,如遇复杂业务,可在第二种和第三种中取舍 此方法最关键的为 resources/META-INF/spring.factories 文件,当项目启动时,Spring会扫描所有jar包下面的 spring.factories 文件,进行相应的自动配置处理,此处我们不进行深入讲解,只看看基本配置 0 其中  org.springframework.boot.autoconfigure.EnableAutoConfiguration 代表自动配置的 key,即代表需要自动配置哪些类,\ 可以理解为一个换行符,则该行下面的每行当做一个参数
# Auto Configure # 定义自动装配config类,当系统引入该jar包时, spring上下文将初始化这些config类 
org.springframework.boot.autoconfigure.EnableAutoConfiguration

 

第二行则为我们刚才看见的配置类的全路径,如果需要 Spring 自动配置多个类,我们依行写入它的全路径即可 当做完这一步,我们的组件就可以打包了,然后使用者只需要引入我们的jar包,Spring就会在启动时对我们 spring.factories 中的所有配置类进行自动配置,此时不需要进行包扫描,服务启动之后便可以将第三方组件引用过来 0   参考网址: https://www.cnblogs.com/adversary/p/10346278.html https://www.lmlphp.com/user/16538/article/item/477335/ https://blog.csdn.net/reggergdsg/article/details/110479353
这篇关于SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!