spring boot 默认不扫描第三方 jar 中的注解类,需显式配置包扫描、@import 导入、@bean 手动注册、@import 动态注入或通过 spring.factories 实现自动装配。

显式配置包扫描范围
适用于你有权限确认第三方库的包路径,且希望复用其原有注解(如 `@Service`)。
- 在主应用中新建一个配置类,用 @ComponentScan 指定第三方包名,例如:
@Configuration<br>@ComponentScan(basePackages = "com.example.mylib")
注意大小写和路径必须完全匹配 JAR 中实际的包结构;支持数组,可同时扫多个包。 - 再通过 @Import 将该配置类引入启动类:
@SpringBootApplication<br>@Import(MyLibConfig.class)
- 如果只是临时验证,也可直接在
@SpringBootApplication上加scanBasePackages属性:@SpringBootApplication(scanBasePackages = {"com.example.demo", "com.example.mylib"})
用 @Configuration + @Bean 手动注册
最通用、最可控的方式,尤其适合第三方类没有 Spring 注解、或需要定制初始化逻辑(比如读取配置、传参构造)。
- 新建一个 @Configuration 类,在其中定义返回第三方实例的方法,并标注 @Bean:
@Configuration<br>public class ThirdPartyConfig {<br> @Bean<br> public MyClient myClient(@Value("${myclient.timeout:5000}") int timeout) {<br> return new MyClient(timeout);<br> }<br>}- 这个方式不依赖类上是否有注解,也不关心它在哪个包,只要方法能 new 出来,就能进容器。
通过 @Import 导入类或选择器
适合封装成可复用模块,或需动态决定注入哪些类的场景。
- @Import(普通类):直接导入无注解的类,Spring 会将其作为单例 Bean 注册,ID 为全限定名。
-
@Import(ImportSelector 实现类):实现
selectImports()方法,返回要加载的类名数组,适合根据条件筛选注入项。 - @Import(ImportBeanDefinitionRegistrar):更底层,可编程式注册 Bean 定义,支持设置作用域、代理模式等高级选项。
走自动装配机制(推荐用于发布 SDK)
如果你是第三方库的作者,想让使用者“零配置”接入,就该在 JAR 中内置自动配置。
- 在
META-INF/spring.factories文件里声明自动配置类:org.springframework.boot.autoconfigure.EnableAutoConfiguration=\<br> com.example.mylib.MyLibAutoConfiguration
-
MyLibAutoConfiguration是一个 @Configuration 类,内部用 @Bean 注册核心组件,并可配合@ConditionalOnClass、@ConditionalOnMissingBean做条件装配。 - 使用者只需引入该 JAR,Spring Boot 启动时就会自动加载并注册 Bean。











