Spring Boot AnnotationConfigEmbeddedWebApplicationContext无法填充动态类中的自动声明的声明字段
观书散遗帙,探古穷至妙。这篇文章主要讲述Spring Boot AnnotationConfigEmbeddedWebApplicationContext无法填充动态类中的自动声明的声明字段相关的知识,希望能为你提供帮助。
有一个JUnit测试如下:
【Spring Boot AnnotationConfigEmbeddedWebApplicationContext无法填充动态类中的自动声明的声明字段】内存编译器将一个字符串编译为on.the.fly类。该报告包含一些@Autowired声明的字段,如reportRepository等。
一切都按预期工作,动态类报告可以使用自动装配的字段实现其功能。
当它被放入MVC环境时,使用autowired
应用程序上下文,即AnnotationConfigEmbeddedWebApplicationContext,无法填充autowired
属性值。
使用debug,findCandidateNames
方法return []
,它应返回一个包含字段名称的数组,如测试环境中所示。请参考相关的源代码并给我一些建议。谢谢。
results =compiler.compile("Report.java", reportClassString);
Class<
?>
clazz = compiler.loadClass("on.the.fly.Report", results);
IReport report = (IReport) applicationContext.getAutowireCapableBeanFactory().createBean(clazz);
report.creatPdf(reportObject);
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为'on.the.fly.AgreementReport'的bean时出错:通过字段'agreementReportProperties'表示不满意的依赖关系; 嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型为'com.lims.api.report.domain.dto.AgreementReportProperties'的限定bean可用:预计至少有1个bean可以作为autowire候选者。依赖注释:{org.springframework.beans.factory.annotation.Autowired(required = true)}在org.springframework的org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587)。 beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)位于sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的com.lims.api.sample.web.controller.AgreementController.downloadPdfFile(AgreementController.java:161) )答案经过几天的研究,我找到了根本原因。只需将我的自定义类加载器作为spring上下文类加载器的子项,然后就可以成功注入依赖项。源代码如下:
class clazz = compiler.loadClass(“on.the.fly.AgreementReport”,results,context.getClassLoader());
推荐阅读
- 如何在Spring Boot控制器类中传递参数(app正在使用Spring Security)
- 刷新/重新加载Angular 2 Web App
- Android模型视图控制器实现给出错误
- 如何使用JAVA在Android中拆分ArrayList()
- Android arrayList检索数据
- Android排序自定义对象数组
- 在Android中的SharedPreferences中存储数组的最有效方法是什么()
- 如何在Electron Framework中实现本机上下文菜单(带有检查元素)
- 如何在Electron Framework中实现类似选项卡的浏览器