Java 未解决org.springframework.beans.factory.NoSuchBeanDefinitionException异常

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

我从Spring开始,在使用基于XML的bean factory运行这个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>
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");