当前位置: 首页 > 知识库问答 >
问题:

Spring boot自动配置,带依赖项,不带@ComponentScan

别永年
2023-03-14

Spring boot提供组件扫描来查找要扫描的包。

我正在构建一个库,里面有@RestController包com.mylib.controller。还有其他类以及不同包中的原型注释。

因此,如果有人正在使用com.myapp基础包开发SpringBoot Application。他在他的应用程序中使用我的库。他需要提到@ComponentScan("com.mylib")来发现库的原型组件。

是否有任何方法可以在不包含库包的情况下扫描组件?

由于spring-boot-starter-驱动器仅使用依赖关系公开其endpoint,而无需定义@ComponentScan。或扫描的任何默认包,而不管应用程序基础包如何。

共有2个答案

邓卓
2023-03-14

Spring boot starter是由Spring设计并由Spring使用的特殊工件
您可以在主要包含spring的源代码中检查这一点。提供文件:

提供:Spring防尘套执行器、测微计芯

我不知道以与Spring Boot Starter相同的方式进行处理的确切方法,但作为可能可以接受的解决方法,您可以在jar中定义一个指定组件扫描(“com.mylib”)的配置类。

 @Configuration
 @ComponentScan("com.mylib")
 public class MyLibConfig {
     //...
 }

这样,jar的客户端需要“仅”来导入@Configuration类:

@Import(MyLibConfig.class)
@Configuration
public class ClientConfig{
  //...
}
韩涵衍
2023-03-14

您可以创建与Spring Provided Starters相同风格的Spring Boot Starter。它们本质上是一个jar'd库,其中包含一个指向@Configuration类的spring.factories文件,以加载其中的一些其他注释,以提供覆盖/bean后退(@ConfigtionalOnMissingBean),并且通常提供自己的@ConfigurationProperties

Stéphane Nicoll提供了一个关于如何构建一个的优秀演示。

https://github.com/snicoll-demos/hello-service-auto-configuration

它也记录在Spring Boot文档中。https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html

库方法也会起作用,但我认为不把它作为一个起点没有任何好处。此外,对于任何库/启动器,我建议删除组件扫描,只在配置中定义bean。这将适用于RestController等立体类型。如果您在配置中使用它创建一个Bean,它将正常工作。

 类似资料:
  • 我有以下存储库:https://github.com/vlio20/bfit,我试图使用R2DBC以异步方式执行db操作。我遵循了以下教程(但可能已经过时了https://www.youtube.com/watch?v=DvO4zLVDkMs 以下是我的pom的相关附件: 我使用的是默认配置,所以我的属性yaml中只有以下配置: 这就是我得到的错误: 组织。springframework。豆。工厂

  • null 0.0.1-快照 _remote.repositories Maven-metadata-local org-utility-0.0.1-snapshot.jar org-utility-0.0.1-snapshot.pom org-utility-0.0.1-snapshot-jar-with-dependencies.jar 因此,我能够将jar“retrieve org-utili

  • 我正在开发一个具有可重用逻辑的公共java库,以与一些AWS服务交互,这些服务将依次被多个消费者应用程序使用。出于这里概述的原因,以及Spring Boot似乎为SQS集成之类的东西提供了大量无模板代码的事实,我决定将此公共库实现为具有自动配置的定制Spring Boot启动器。 我也是Spring框架的新手,因此遇到了一个问题,即我的自动配置类的实例变量没有通过AutoWired注释进行初始化。

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • 但是在我们的Grails(3.0.7)应用程序中,Spring Boot自动配置不会启动。有没有人有办法让带有Spring Boot autoconfigure的Grails工作呢?

  • 我有一个mvn项目,它包含对apache Commons-Lang3的依赖。我设法为这个jar文件生成了一个manifest.mf,它通过我的远程服务器上的java-jar.jar启动。然而,它不包括任何依赖项,我不知道为什么。 您可以看到,它正确地将依赖关系解析为commons-lang并将其放入清单中。但实际文件不见了。 有人知道为什么吗?