7

Spring boot 提供@ComponentScan查找要扫描的包。

我正在建立一个图书馆,@RestControllers里面有package com.mylib.controller. 在不同的包中还有其他带有构造型注释的类。

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

有没有办法在不包括库包的情况下扫描组件@ComponentScan

由于spring-boot-starter-actuator仅通过依赖关系公开其端点,而无需定义@ComponentScan. 或任何被扫描的默认包,无论应用程序基础包如何。

4

2 回答 2

8

您可以创建与 Spring 提供的 Starters 样式相同的 Spring Boot Starter。它们本质上是一个 jar'd 库,其中一个spring.factories文件指向要@Configuration加载的类,并在其中加载一些其他注释以提供覆盖/bean 后退 ( @ConditionalOnMissingBean) 并通常提供自己的@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

图书馆的方法也可以,但我认为不让它成为首发没有任何好处。此外,对于任何库/启动器,我建议删除@ComponentScan并仅在@Configuration. 如果您在配置中@RestController创建它,这将适用于诸如等的刻板印象。@Bean

于 2018-02-15T20:03:36.117 回答
2

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

提供:spring-boot-actuator,micrometer-core

我不知道以与 Spring Boot Starter 相同的方式进行处理的确切方法,但作为可能可接受的解决方法,您可以在 jar 中定义一个@Configuration指定 @ComponentScan("com.mylib").

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

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

@Import(MyLibConfig.class)
@Configuration
public class ClientConfig{
  //...
}
于 2018-02-15T13:55:03.917 回答