我想使用另一个Spring Boot应用程序中存在的一些类。如何在不加载所有bean的情况下导入它们。
答案 0 :(得分:1)
@ComponentScan
注释负责自动加载标记有@Component
或其派生注释的所有类。该注释具有各种选项,可以过滤加载哪些bean。
如果导入的应用程序的父程序包与主应用程序的父程序包不同,则只需将basePackages
选项设置为特定的父程序包。
例如,假设您的主应用程序具有软件包com.example.main
,而导入的应用程序具有com.example.imported
,则可以输入:
@ComponentScan(basePackages = {"com.example.main"})
这将仅导入在主应用程序包下定义的bean。
如果这还不够,还可以在同一注释上使用excludeFilters
选项。
@ComponentScan(excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Imported.class)
})
您还可以将两个选项组合在一起以进行更具体的过滤。
答案 1 :(得分:0)
@metacubed答案可能就足够了。但是另一种非常简单的方法是使用@ComponentScan(basePackageClasses = {BeansToExport.class, MoreBeansToExport.class, ...})
-示例:
@Configuration
public class BeansToExport {
@Bean
public ServiceClass serviceClassBean(){
return new ServiceClass();
}
@Bean
public RespositoryClass repositoryClassBean(){
return new RepositoryClass();
}
}
我将其称为包容性策略,而@metacube的示例将是一个专有策略。两者都有其用途。