所以我遇到需要使用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“
的应用程序上下文中答案 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"/>