2017-10-09 82 views
0

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

我检查了@Component("languagesDtoMapper")@Qualifier("languagesDtoMapper")的多种可能组合。 我试图在我的Spring配置文件来声明豆

<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"/> 

任何想法,欢迎

+0

请使用多行代码块来正确格式化您的代码。 – Clijsters

+0

您是否使用XML配置或Java/Annotation配置进行组件扫描?你能否也请附上它? – araknoid

回答

1

发现问题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是一个接口,unfortnuately实施,x.y.z.Languages被称为相同。让它很难找到问题。

相关问题