Существует следующий тест JUnit:
Компилятор памяти компилирует строку в класс on.the.fly. Отчет, который содержит некоторые объявленные поля @Autowired, например reportRepository и т. Д.
Все работает, как и ожидалось, динамический отчет класса может использовать поля с автоматической связью и реализует его функциональность.
Когда он помещен в среду MVC, используется autowired
контекст приложения, который является AnnotationConfigEmbeddedWebApplicationContext, autowired
значение свойства can 'не быть населенным.
с отладкой, 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: Ошибка при создании bean-компонента с именем 'on.the.fly.AgreementReport': неудовлетворенная зависимость, выраженная через поле 'AgreementReportProperties';вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа com.lims.api.report.domain.dto.AgreementReportProperties ': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательный = true)} в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (Autowirederaj.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:91) по адресу com.lims.api.sample.web.controller.AgreementController.downloadPdfFile (AgreementController.java:161) в sun.reflect.NativeMetholAnitOmp0)