Java 未解决org.springframework.beans.factory.NoSuchBeanDefinitionException异常
我从Spring开始,在使用基于XML的bean factory运行这个Spring应用程序时,它给出了Java 未解决org.springframework.beans.factory.NoSuchBeanDefinitionException异常,java,spring,spring-boot,applicationcontext,spring-bean,Java,Spring,Spring Boot,Applicationcontext,Spring Bean,我从Spring开始,在使用基于XML的bean factory运行这个Spring应用程序时,它给出了NoSuchBeanDefinitionException- Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myCoach' available at org.springframework.beans.fa
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>
TrackCoach.java
package com.paras.springdemo;
public interface Coach {
public String getDailyWorkout();
}
package com.paras.springdemo;
public class TrackCoach implements Coach {
@Override
public String getDailyWorkout() {
return "run 5k";
}
}
xml中缺少这一行
<context:component-scan base-package="com.paras" />
到
只需确保您的XML位于src/applicationContext.XML将coach更改为ClassCoach,但作为一种良好的编码实践,coach应该是练习中的一个接口。TrackCoach在类路径上实现CoachIs上下文文件?正如@SotiriosDelimanolis所建议的那样,我能看到您得到当前错误的唯一方法是,如果Spring没有处理该
applicationContext.xml
文件,那么在此之前没有其他错误。如果正在处理该文件并且在处理时没有导致错误,那么肯定会有一个名为mycach
的bean。Spring是否可能找到了与上面显示的不同的applicationContext.xml
?有时我会这样做,即提取结果JAR文件的内容,以查看其中的实际内容(bean XML文件)使用classpath:
而不是classpath*:
。这可能会导致启动时出错,说明它无法加载applicationContext.xml
,这意味着它不是类路径的一部分。确保它位于源目录中,并且在使用maven/gradle时,它位于src/main/resources
而不是src/main/java
中。
<?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>
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");