我有一个Spring Boot应用程序。我有几个客户,每个客户都有此应用程序的一个版本,以及一些自定义@Component
,@Service
等类。我试图将那些自定义的Spring bean提取到库jar中,然后将它们放在类路径上并动态加载。
例如,假设我的核心库中有一个接口:
public interface MyInterface {
String doSomething();
}
我的客户专用库中有MyInterface
的不同实现,所有实现都用@Component
注释。
我希望能够放
@Autowired
List<MyInterface> components;
在我的主应用程序中。
然后,我只想将主应用程序放置在具有相应客户库(或多个)的文件夹中,然后使用
运行它java -cp . -jar my-application.jar
并让@Autowired
提取客户的特定组件。
这可能吗?我不想在主应用程序中使用@Import
,因为这需要知道正在加载哪个客户的库。
答案 0 :(得分:0)
我确实想到了这一点。这是一个演示项目,用于在运行时从插件加载 @Component
对象。
https://github.com/imnotpete/plugin-demo
它使用 loader.properties
文件指定要添加到类路径的文件夹,然后 @ComponentScan
可以在自动装配时包含该文件夹中的任何 jar。
loader.properties:
loader.path=plugins