Spring MVC в SpringBoot 2: bean-компонент 'xyz' не может быть внедрен как 'com..Abc', потому что это динамический прокси JDK, который реализует: - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть рабочий проект в Spring Web MVC.Класс «А» является абстрактным классом.Класс «B» расширяет A, а класс «C» расширяет B. Класс C имеет следующие аннотации:

@Component
@Primary

До недавнего времени все работало нормально, мы решили перейти на SpringBoot 2. Мы перенесли нашпроект в SpringBoot 2, добавлены необходимые зависимости.Теперь, когда я запускаю проект, я получаю эту ошибку:

Bean named 'c' is expected to be of type 'com..B' but was actually of type 'com.sun.proxy.$Proxy132'

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'c' could not be injected as a 'com..B' because it is a JDK dynamic proxy that implements:

Action:

Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.

Я покопался и нашел в Интернете общее решение, которое не работает для меня. *;** Используя любую из этих аннотаций;

@EnableAspectJAutoProxy(proxyTargetClass=true)
@EnableAsync(proxyTargetClass=true)
@EnableCaching.(proxyTargetClass=true)

PS У меня есть класс конфигурации, как указано ниже;

EnableAspectJAutoProxy(proxyTargetClass=true)
@Configuration("mySpringConfig")
@ComponentScan(basePackages = { "com.allpackages" }, excludeFilters = {someExcludeFilters})
@Conditional(SomeApiSpringConfigCondition.class)
public class SomeCoreSpringConfig extends ApiWebConfiguration{
}

Кроме того, точка входа SpringBoot выглядит следующим образом;

@SpringBootApplication(exclude = { SomeClasses})
@EnableWebMvc
public class AppInitializer {

    public static void main(String[] args) {

        SpringApplication.run(AppInitializer.class, args);

    }

}

Заранее спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

После долгих раскопок все заработало, добавив следующее в класс "C".@Scope (proxyMode = ScopedProxyMode.TARGET_CLASS)

Итак, мой класс "C" выглядит так:

@Component
@Primary
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
class C{}

Однако теперь ошибка идет для другого класса.Так что я бы сказал, не устойчивое решение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...