当前位置: 首页 > 知识库问答 >
问题:

在Spring中动态添加外部jar并将类注册为beans

锺功
2023-03-14

我在战争中动态加载一个罐子。这个jar包含一些我想注册为bean的java类。代码看起来像

动态加载jar文件

Resource jarFile = appContext.getResource("file:" +<jar_file_path>);
URL url = jarFile.getURL();
URL[] urls = new URL[] { url };             
ClassLoader classLoader = appContext.getClassLoader();

加载类并将其注册为Spring应用程序上下文中的bean

 Class<?> daoClass = classLoader.loadClass("com.myclass");
 Object daoObj = appContext.getAutowireCapableBeanFactory().createBean(daoClass);

然而,这将加载dao类。现在,当我加载依赖于dao类的服务类时,它会失败,出现以下异常

原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到 [com.myclass] 类型的合格 bean,用于依赖关系:预计至少有 1 个 bean 符合此依赖关系的自动连线候选条件。Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:988) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858) atorg.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:440) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:418) atorg.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:546)

提前谢谢

共有1个答案

姜鸿
2023-03-14

我想你是在Servlet容器中运行的?如果是这样,则不能使用文件URLClassloader加载类。这条路不存在,它在战争中。

只要确保jar在< code>WEB-INF/lib中,您就能够< code > class . forname(" com . my class ")。

 类似资料:
  • *用Winrar打开。jar文件,转到/lib文件夹,手动选择my文件,然后确保选择Winrar为您提供压缩选项的左下角的No Compression选项,以防您在Google上找到该选项,但没有人回答。

  • 我尝试在pom中添加以下内容。xml 但没起作用。 我发现的更多信息: 它可能与SpringBootMaven插件有关。https://docs.spring.io/spring-boot/docs/current/maven-plugin/在构建jar时,它不包括作用域“系统”库。 裁判:https://github.com/spring-projects/spring-boot/blob/ma

  • 问题内容: 我想尽可能使用Java代码将jar文件动态添加到我的项目的类路径中,我想使用外部jar文件并加载其类,以便稍后将其作为Beans执行(Spring框架)。 谢谢 :) 问题答案: URLClassLoader child = new URLClassLoader (myJar.toURL(), this.getClass().getClassLoader()); Class class

  • 我刚刚开始使用servlet和JSP开发在线应用程序。您可能知道,我们需要一个doPost方法,它接收HttpServletRequest请求、HttpServletResponse(Response)参数。 我的问题如下。我知道我需要导入javax.servlet和javax.servlet.http.*包才能使其工作。我记得有一次,一个疯狂的老师告诉我,我可以修改我的jdk/jre/lib文件

  • 在spring boot项目中添加了一个external作为依赖项,scope=system。Build是成功的,并且当从eclipse运行项目时也是成功的。但是当我使用java-jar springboot.jar命令从命令项目运行项目时。则失败,例外情况如下: 通过字段“jdbc template”表示的不满足依赖项;嵌套异常为org.springframework.beans.factory

  • 问题内容: 如何在IntelliJ IDEA中将外部库添加到项目中,以便在构建工件时它仍然可以访问该库中的类? 我已经从Project Structure创建了一个新的Jar工件,然后将外部JAR添加到库中,然后在Modules List中对其进行了检查,最后将其添加到Artifact的Output中。这些都不起作用。当我构建并尝试运行我的应用程序时,它将引发错误: 我缺少什么,还是我做错了? 问