图片中的红框内是xml文件中的bean的name属性,当设置的name与实例化对象的默认名字(类名首字母小写),不一致,并且程序中通过类名获取bean时会报错。
public class SpringTest2 {
public static void main(String[] args) {
ApplicationContext Context = new ClassPathXmlApplicationContext("Anno.xml");
Music musicBean1 = Context.getBean(Music.class);
System.out.println("musicBean1.toString() = " + musicBean1.toString());
}
}
Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.cql.entity.Music' available: expected single matching bean but found 2: music,createMusic
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:420)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:349)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1127)
at com.test.SpringTest2.main(SpringTest2.java:25)
Process finished with exit code 1
设置了自定义名字的,正确做法是通过方法名去获取bean,如下。
Music musicBean = (Music) Context.getBean("createMusic");
System.out.println("musicBean.toString() = " + musicBean.toString());