systemProperties和integrationGlobalProperties发生冲突

时间:2014-04-08 07:34:16

标签: java spring spring-integration

所以我遇到需要使用spring集成的情况。所以我为它创建了应用程序上下文,然后我在其中描述了我的所有逻辑。但现在,我有一个类似的错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [java.util.Properties] is defined: expected single matching bean but found 2: [integrationGlobalProperties, systemProperties]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:800)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1184)
    ... 61 more

有人遇到systemProperties和integrationGlobalProperties这个问题吗?这是什么意思?

P.S。我的应用程序上下文被导入到另一个具有“default-autowire =”byType“

的应用程序上下文中

2 个答案:

答案 0 :(得分:0)

如您所见,您的上下文有两个java.util.Properties的bean。这意味着您无法注入byType

使用@Qualifier("systemProperties")将其限制为特定Properties

integrationGlobalProperties不仅仅是一个由Framework填充的bean。对于真实的应用程序来说,autowire byType越来越不好,这并不奇怪。

答案 1 :(得分:0)

我最近遇到了同样的问题。经过一些研究后,我决定创建一个CustomBeanPostProcessor类(实现BeanFactoryPostProcessor),它将尝试查找冲突的bean并将其'autowire'属性更改为'byName ',从而避免冲突。

请看下面的代码:

public class CustomBeanPostProcessor implements BeanFactoryPostProcessor{
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        if (beanFactory.containsBean("integrationGlobalProperties")){
           //Choose on of the options - either disable autowiring for bean completly,
           //or change autowiring type
           beanFactory.getBeanDefinition("integrationGlobalProperties").setAutowireCandidate(false);
           beanFactory.getBeanDefinition("integrationGlobalProperties").setAttribute("autowire", "byName");
        } 
    }
}

不要忘记将此类声明为Spring bean:

<bean class="edu.stackoverflow.spring.misc.CustomBeanPostProcessor"/>