如何避免使用 Spring Boot 由另一个库配置外部库

Posted

技术标签:

【中文标题】如何避免使用 Spring Boot 由另一个库配置外部库【英文标题】:How to avoid to configure an external library by another library using Spring Boot 【发布时间】:2016-12-11 02:07:13 【问题描述】:

假设我有两个 Spring Boot 项目。第一个项目只是一个提供各种功能的支持库。第二个是使用支持项目(jar)的“主”项目(主库)。

支持库有一些服务应该由主项目自动装配。

如何配置支持库,使主库不必为支持库做任何配置。本质上我说的是组件扫描。

到目前为止,我读到的是,主库必须在组件扫描中包含支持库的包。这是真的吗?我希望不会,因为在我看来,支持库应该自己完成所有配置,而另一个仅使用此支持库的库(或项目)不应该处理支持库的配置。

本质上,我想知道支持库是否有可能通过@Configuration 注释或类似(或@SpringBootApplication)来配置自己,以便另一个库不必处理其他库的所有细节.我真的希望这确实能以某种方式起作用,因为我认为另一个库必须为它的支持库在其配置方面完成这项工作,这有点极端。

【问题讨论】:

【参考方案1】:

好的,我自己找到了解决办法。

诀窍如下。

在支持项目中有一个配置类(我已经有了,但没有考虑在内)。 配套库的配置类基本如下:

@SpringBootApplication
public class SupportLibApplication 

主项目也有一个配置类。诀窍是在主项目的配置类中包含支持类的配置类。这是我缺少的链接。 主项目的配置类现在看起来像:

@SpringBootApplication
@Import(SupportLibApplication.class)
public class QuestApplication extends WebMvcConfigurerAdapter 
…

【讨论】:

或者,当您使用 Spring Boot 时,请阅读有关如何创建自己的自动配置的部分,您可以省略导入,您只需要添加依赖项。【参考方案2】:

你需要在你的项目中添加一个依赖spring-boot-configuration-processor,比如@M。 Deinum 提到。这是工作example 的链接。但是,我还没有找到在使用这种方法时拥有多个 bean 的方法。

在 Stack Overflow 上的 answer 中显示了另一种方法。

【讨论】:

以上是关于如何避免使用 Spring Boot 由另一个库配置外部库的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何使用 Spring Data MongoDB 计算由另一个分组的字段的总和

Spring Boot (Jackson):如何避免类名被序列化为 JSON

动态代码评估:不安全的反序列化(Spring Boot 2) - 如何避免与执行器相关的强化问题,还是误报?

如何在 Spring Boot 中手动新建实例中使用 @Autowired

使用 Spring Boot 和 Jackson 避免两个不同的域模型

避免无限循环 Spring Boot