大佬教程收集整理的这篇文章主要介绍了Spring 4.1 @Qualifier不起作用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@QualifIEr用于通过其名称或ID引用bean。由于无法找到名称或ID为“ small”的xml条目,因此它尝试按类型进行匹配,并找到了两个Size实例。
以下将起作用:
@H_262_7@ <bean ID="small" class="com.tests.test2.Size"> <property name="height" value="2"/> <property name="wIDth" value="1"/> </bean>
虽然看起来您还是想将Size实例视为预配置的bean。如果是这种情况,您可以在xml文件中声明Dog的实例,并引用Size Bean …类似这样:
@H_262_7@ <bean ID="rex" class="com.tests.test2.SimpleDog"> <property name="name" value="puppy" /> <property name="size" ref="size1"/> </bean>
我有这样的类,xml配置文件和错误堆栈跟踪。我不知道为什么@Qualifier无法正常工作。我看到他甚至什么都不做的错误。
狗
@H_262_7@public class SimpleDog implements Dog { @Autowired @Qualifier("small") private Size size; private String name; public Size getSize() { return size; } public void setSize(Size sizE) { this.size = size; } public String getName() { return name; } public void setName(String Name) { this.name = name; } @Override public void giveSound() { System.out.println("dog size is : width : (" + size.getWidth() + "),height : (" + size.getHeight() + ")"); System.out.println("dog's name : " + Name); }
}
考试班
@H_262_7@public class Test2 { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring-test2.xml"); SimpleDog dog = (SimpleDog) context.getBean("dog"); dog.giveSound(); }
}
spring.xml
@H_262_7@<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/scheR_68_11845@a/beans" xmlns:xsi="http://www.w3.org/2001/XMLscheR_68_11845@a-instance" xsi:scheR_68_11845@aLOCATIOn="http://www.springframework.org/scheR_68_11845@a/beans http://www.springframework.org/scheR_68_11845@a/beans/spring-beans.xsd"> <bean id="dog" class="com.tests.test2.SimpleDog"> <property name="name" value="Puppy" /> </bean> <bean id="size1" class="com.tests.test2.Size"> <qualifier value="small"/> <property name="height" value="2"/> <property name="width" value="1"/> </bean> <bean id="size2" class="com.tests.test2.Size"> <qualifier value="large"/> <property name="height" value="20"/> <property name="width" value="10"/> </bean> <bean class="org.springframework.beans.factory.Annotation.AutowiredAnnotationBeanPostProcessor"/> </beans>
错误堆栈跟踪
@H_262_7@WARNING: Exception encountered during context initialization - cancelling refresh attempt org.springframework.beans.factory.beanCreationException: Error creaTing bean with name 'dog': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.beanCreationException: Could not autowire field: private com.tests.test2.Size com.tests.test2.SimpleDog.size; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.tests.test2.Size] is defined: expected single matching bean but found 2: size1,size2 at org.springframework.beans.factory.Annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140) at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84) at pl.patrykgryta.test2.Test2.main(Test2.java:12) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegaTingMethodAccessorImpl.invoke(DelegaTingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) Caused by: org.springframework.beans.factory.beanCreationException: Could not autowire field: private com.tests.test2.Size com.tests.test2.SimpleDog.size; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.tests.test2.Size] is defined: expected single matching bean but found 2: size1,size2 at org.springframework.beans.factory.Annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:555) at org.springframework.beans.factory.Annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.Annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) ... 18 more Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.tests.test2.Size] is defined: expected single matching bean but found 2: size1,size2 at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1016) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904) at org.springframework.beans.factory.Annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:527) ... 20 more Exception in thread "main" org.springframework.beans.factory.beanCreationException: Error creaTing bean with name 'dog': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.beanCreationException: Could not autowire field: private com.tests.test2.Size com.tests.test2.SimpleDog.size; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.tests.test2.Size] is defined: expected single matching bean but found 2: size1,size2 at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1016) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904) at org.springframework.beans.factory.Annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:527) ... 20 more
需要帮忙
以上是大佬教程为你收集整理的Spring 4.1 @Qualifier不起作用全部内容,希望文章能够帮你解决Spring 4.1 @Qualifier不起作用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。