Spring boot提供@ComponentScan
来查找要扫描的包。
我正在构建一个内部带有@RestControllers
的 package com.mylib.controller
的库。还有其他类以及不同包中的构造型注释。
所以,如果有人正在使用com.myapp
基础包开发SpringBoot Application。
他在他的应用程序中使用我的库。他需要提到@ComponentScan("com.mylib")
来发现图书馆的刻板印象。
有没有办法扫描组件而不包括@ComponentScan
中的库包?
由于spring-boot-starter-actuator仅使用依赖关系公开其端点,而不定义@ComponentScan
。或者无论应用程序基础包如何都扫描的任何默认包。
答案 0 :(得分:5)
您可以使用与Spring提供的Starters相同的样式创建Spring Boot Starter。它们本质上是一个带有spring.factories
文件的jar文件库,指向@Configuration
类,在其上加载一些其他注释以提供覆盖/ bean后退(@ConditionalOnMissingBean
)并且通常提供他们自己的@ConfigurationProperties
。
StéphaneNicoll提供了一个如何构建一个的优秀演示。
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
中定义bean。这适用于像@RestController
等类型的类型,如果你在配置中创建@Bean
,它将正常运行。
答案 1 :(得分:1)
Spring boot starter是由Spring设计并由Spring使用的特殊工件
您可以在the source code中查看主要包含的内容
spring.provides
档案:
提供:spring-boot-actuator,micrometer-core
我不知道以与Spring Boot Starter相同的方式处理的确切方式,但作为可能接受的解决方法,您可以在jar中定义指定@Configuration
的{{1}}类。
@ComponentScan("com.mylib")
通过这种方式,jar的客户只需要"只有"导入 @Configuration
@ComponentScan("com.mylib")
public class MyLibConfig {
//...
}
类:
@Configuration