Spring 3 到 Spring 4 的迁移,没有找到依赖的 Dto Mapper 类型的合格 bean

Spring3 to Spring4 migration, No qualifying bean of type DtoMapper found for dependency

我正在将一个工作项目从 Spring3 迁移到 Spring4,我只更改了 pom.xml,现在(部署时)应用程序在运行时找不到我的映射器的任何 bean。奇怪的是,我所有的集成和单元测试仍然有效。 (我在那里测试我的映射器)

我检查了 @Component("languagesDtoMapper")@Qualifier("languagesDtoMapper") 的多种可能组合。 我试图在我的 spring 配置

中声明 bean
<bean id="languagesDtoMapper" class="com.project.mapper.LanguagesDtoMapper"/>

但是无论我做什么,我都会收到以下错误消息:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.project.infrastructure.dtomapper.DtoMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=languagesDtoMapper)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)

项目结构:

在控制器中:

 @Autowired
 @Qualifier("languagesDtoMapper")
 private DtoMapper<Languages, LanguagesTableDto> partnerLanguageDtoMapper;

类:

@Component("languagesDtoMapper")
public class LanguagesDtoMapper extends AbstractDtoMapper<Languages, LanguagesDto> {

public abstract class AbstractDtoMapper<Source, Target> implements DtoMapper<Source, Target> {

public interface DtoMapper<Source, Target> {

<context:annotation-config />
<context:component-scan base-package="com.project"/>

欢迎任何想法

经过 3 天的搜索后发现了问题!

Spring 3 将在 ClassName 上自动装配 bean, Spring 4 在 full.package.name.ClassName 上执行此操作。

在我调用的控制器中

 import a.b.c.Languages;
 import a.b.c.LanguagesTableDto;

 @Autowired
 @Qualifier("languagesDtoMapper")
 private DtoMapper<Languages, LanguagesTableDto> partnerLanguageDtoMapper;

在我的映射器中是这样的:

 import x.y.z.Languages;
 import x.y.z.LanguagesTableDto;

 @Component("languagesDtoMapper")
 public class LanguagesDtoMapper extends AbstractDtoMapper<Languages, LanguagesDto> {

a.b.c.Languages 是一个接口,不幸的是实现,x.y.z.Languages 被调用相同。很难找到问题。