gpt4 book ai didi

java - 从外部 JAR 文件加载 Spring 组件

转载 作者:搜寻专家 更新时间:2023-11-01 03:50:10 25 4
gpt4 key购买 nike

我正在开发 Spring Boot 应用程序。我想提供一个(非常基本的)插件系统。最初我希望像这样将 JAR 添加到类路径中就足够了:

URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class sysclass = URLClassLoader.class;

Method method = sysclass.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(sysloader, new File("./plugin/plugin.jar").toURI().toURL());

SpringApplication.run(Application.class, args);

在 plugin.jar 中是一个用 @Controller 注释的类和一个 RequestMapping。上下文加载正常, Controller 的构造函数也被调用。但是,查看日志,我可以看到没有获取 RequestMapping。

此外,如果我尝试 @Autowire 插件 Controller 中的 JpaRepository 它会失败,提示找不到存储库接口(interface)类(我猜这是我引起的一些问题搞乱 ClassLoader)。

尽管在我的主应用程序中 Autowiring 存储库工作正常,因此它的配置应该不是问题。

我做错了什么吗?我可以配置 Springs ApplicationContext 或其 ClassLoader 使其正常工作吗?

总而言之,我想在运行时从另一个文件夹中的外部 JAR 加载一些 Controller (可能还有其他 Spring 组件)。

最佳答案

现在我只是在我的应用程序 pom 中为我的各种插件声明配置文件,我只是使用我想要的插件的配置文件编译它。它不是很动态,但至少我可以将插件开发与应用程序开发完全分开,并让 Spring 处理插件的所有组件。

这不是我想要的,但我想我还是会描述我是如何“解决”它的。如果有人知道使用外部 JAR 来完成这项工作的方法,我会很乐意接受这个答案!

关于java - 从外部 JAR 文件加载 Spring 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30782274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com