Spring 自动连线失败非法辩论不安全操作异常

Spring 自动连线失败非法辩论不安全操作异常,spring,spring-mvc,spring-integration,Spring,Spring Mvc,Spring Integration,升级Spring jar后,我遇到以下异常 org.springframework.web.servlet.DispatcherServlet - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.integration.transformer.HeaderEn

升级Spring jar后,我遇到以下异常

org.springframework.web.servlet.DispatcherServlet - Context initialization failed  
org.springframework.beans.factory.BeanCreationException: Error creating bean with name     'org.springframework.integration.transformer.HeaderEnricher#4': Cannot create inner bean     '(inner bean)' of type [org.springframework.integration.transformer.HeaderEnricher$MessageProcessingHeaderValueMessageProcessor] while setting constructor argument with key [#{partnerHeaderKey}]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#19': Injection of resource dependencies failed; nested exception is java.lang.IllegalArgumentException: Can not set com.follett.fheg.coursemateriallookup.coursematerial.data.dao.PartnerDAO field com.follett.fheg.coursemateriallookup.coursematerial.integration.headerenricher.PartnerHeaderEnricher.partnerDAO to org.springframework.integration.transformer.HeaderEnricher$MessageProcessingHeaderValueMessageProcessor
at org.springframework.beans.factory.support.BeanDefinitionValue Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#19': Injection of resource dependencies failed; nested exception is java.lang.IllegalArgumentException: Can not set com.follett.fheg.coursemateriallookup.coursematerial.data.dao.PartnerDAO field com.follett.fheg.coursemateriallookup.coursematerial.integration.headerenricher.PartnerHeaderEnricher.partnerDAO to org.springframework.integration.transformer.HeaderEnricher$MessageProcessingHeaderValueMessageProcessor
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:306)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:271)
... 40 more
Caused by: java.lang.IllegalArgumentException: Can not set com.follett.fheg.coursemateriallookup.coursematerial.data.dao.PartnerDAO field com.follett.fheg.coursemateriallookup.coursematerial.integration.headerenricher.PartnerHeaderEnricher.partnerDAO to org.springframework.integration.transformer.HeaderEnricher$MessageProcessingHeaderValueMessageProcessor
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:57)
at java.lang.reflect.Field.set(Field.java:657)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:150)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:303)
... 44 more
从我所读到的内容来看,我需要向我的bean添加
@组件
注释和/或在我的应用程序上下文中创建组件-这两种方法都不起作用。它所指的DAO是这样声明的
。如果我删除
@Component
注释,我会在
@Autowired
下看到一条红线,并显示一条消息:“必须在有效的Springbean(@Component/@Service等)中定义Autowired成员”,但在删除注释之后,我仍然会看到错误

我使用的是Spring集成,所以bean到auto wire是在这里定义的

<integration:header-enricher>
        <integration:header name="#{partnerHeaderKey}" method="getPartner">
            <bean class="com.follett.fheg.coursemateriallookup.coursematerial.integration.headerenricher.PartnerHeaderEnricher"/>
        </integration:header>
    </integration:header-enricher>

感谢您的任何想法或帮助!多谢各位

注意:如果我回到Spring 2.1.4.RELEASE,即使没有在应用程序上下文中声明
@组件
,应用程序也可以正常运行

更新


正如blackpanther在下面提到的,我需要应用程序上下文中的一个元素。我没有提到我确实有这个
,DAO也有另一个
不完全是这样,只是把注释
@Component
放进去并不意味着Java类将自动连接它的属性。为了有效地使用
@Component
注释,您必须告诉Spring在哪里查找这些类。这是通过Spring配置中的
标记完成的


我想看看这个,因为它可能会对您有所帮助。

您可以在组件内部的bean声明顶部指定@Qualifier,如下所示

@Autowired
@Qualifier("loginService")
private ILoginService loginService;

loginService是.xml上下文文件中bean的名称

我能够通过使用@Component注释以及修改在上下文中创建bean的方式来解决这个问题

出于某种原因,当我将
移出
并添加
ref-“”
属性时,它开始正常工作。我得到一个不同的错误,但我能够让应用程序运行

老路


新方式


是的,我也有这个标签。我很抱歉没有提及此事。我会更新这个问题。
<integration:header-enricher>
    <integration:header name="#{partnerHeaderKey}" method="getPartner">
        <bean   class="com.follett.fheg.coursemateriallookup.coursematerial.integration.headerenricher.Partner    HeaderEnricher"/>
    </integration:header>
</integration:header-enricher>
<integration:header-enricher>
<integration:header name="#{partnerHeaderKey}" method="getPartner" ref="myBean">
</integration:header>
    </integration:header-enricher>
</integration:chain>
<bean id="myBean"   class="com.follett.fheg.coursemateriallookup.coursematerial.integration.headerenricher.PartnerHeaderEnricher"/>