从库中加载Spring Bean而不导入配置文件?

时间:2019-01-17 03:27:52

标签: java spring spring-boot plugins

我有一个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,因为这需要知道正在加载哪个客户的库。

1 个答案:

答案 0 :(得分:0)

我确实想到了这一点。这是一个演示项目,用于在运行时从插件加载 @Component 对象。

https://github.com/imnotpete/plugin-demo

它使用 loader.properties 文件指定要添加到类路径的文件夹,然后 @ComponentScan 可以在自动装配时包含该文件夹中的任何 jar。

loader.properties:

loader.path=plugins