问题描述
我从Spring开始,并在基于XML的bean工厂中运行此Spring应用程序,它给出了NoSuchBeanDeFinitionException
-
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDeFinitionException: No bean named 'myCoach' available
at org.springframework.beans.factory.support.DefaultListablebeanfactory.getBeanDeFinition(DefaultListablebeanfactory.java:816)
at org.springframework.beans.factory.support.Abstractbeanfactory.getMergedLocalBeanDeFinition(Abstractbeanfactory.java:1288)
at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:298)
at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:207)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1115)
at com.paras.springdemo.HelloSpringApp.main(HelloSpringApp.java:14)
类-HelloSpringApp.java
package com.paras.springdemo;
import org.springframework.context.support.ClasspathXmlApplicationContext;
public class HelloSpringApp {
public static void main(String[] args) {
ClasspathXmlApplicationContext context = new ClasspathXmlApplicationContext("classpath*:applicationContext.xml");
Coach theCoach = context.getBean("myCoach",Coach.class);
System.out.println(theCoach.getDailyWorkout());
context.close();
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="myCoach"
class="com.paras.springdemo.TrackCoach">
</bean>
</beans>
Interface- Coach.java
package com.paras.springdemo;
public interface Coach {
public String getDailyWorkout();
}
TrackCoach.java
package com.paras.springdemo;
public class TrackCoach implements Coach {
@Override
public String getDailyWorkout() {
return "run 5k";
}
}
解决方法
您在xml中缺少此行
<context:component-scan base-package="com.paras" />
然后改变
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");
到
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
只需确保您的XML位于src / applicationContext.xml