NoSuchBeanDefinitionException: 没有名为'triangle'的bean被定义

4

我刚开始使用Spring。在一个简单的Java应用程序中,我遇到了以下错误:

NoSuchBeanDefinitionException:未定义名为'triangle'的bean

请帮我解决这个问题。

Jul 20, 2014 7:44:44 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@383118: startup date [Sun Jul 20 07:44:44 EDT 2014]; root of context hierarchy
Jul 20, 2014 7:44:44 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@47eaec: defining beans []; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'Triangle' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:570)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1108)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:278)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117)
    at com.springDemo.main.DrawingApp.main(DrawingApp.java:22)

我的contextBean.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="triangle"  class="com.springDemo.main.Triangle1" >
        <property name="type" value="Equilateral" /> 
    </bean >

</beans>

DrawingApp.java

package com.springDemo.main;

import org.springframework.core.io.*;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DrawingApp {

    private static ApplicationContext context;

    static String[] springConfig  = 
    {   
        "classpath::*/com/springDemo/main/contextBean.xml"           
    };

    public static void main(String[] args)
    {

        context = new ClassPathXmlApplicationContext(springConfig);
        Triangle triangle =( Triangle )context.getBean("triangle");
        triangle.draw();
    }
}

如果看你的代码,我认为除了不会放置classpath::而是classpath:之外没有问题。我想你可能在classpath中加载了两个contextBean.xml。你发布的那个不是在jvm中首先加载的那个。这是一个很常见的错误。如果你能分享你的项目(或者至少是你的classpath),那么我们就可以知道真正的原因。 - hutingung
另外需要提到的是,classpath:* 将会从所有依赖的 jar 包中搜索。而 classpath: 则只会从你的项目中搜索,不包括依赖的 jar 包。 - hutingung
3个回答

2

你已经使用了 ClassPathXmlApplicationContext 查找类路径,因此不需要添加 classpath::*

只需 删除 它,你的问题就会解决。

ctx = new ClassPathXmlApplicationContext("com/springDemo/main/contextBean.xml");

您还可以尝试使用FileSystemXmlApplicationContext,在此情况下,您需要使用classpath:

ctx = new FileSystemXmlApplicationContext("classpath:com/springDemo/main/contextBean.xml");

0

类路径定义中有两个:。尝试移除一个:

"classpath:*/com/springDemo/main/contextBean.xml"

如果找不到文件,则会抛出“FileNotFoundException”异常。 - Braj
你测试了吗?它给我返回了“类路径资源[claspath:]无法解析为URL,因为它不存在”的错误。 - Braj
不,这只是一个猜测。你能展示一下你的项目结构吗? - Jens
从代码中可以清楚地看出配置和Triangle1存储的位置。 - Braj
看一下我的帖子。 - Braj
这是完整的堆栈跟踪还是其他堆栈跟踪? - Jens

-1
很可能是Spring没有加载contextBean.xml文件。尝试直接加载上下文文件,即不使用通配符和前面提到的:字符。
context = 
   new ClassPathXmlApplicationContext("/com/springDemo/main/contextBean.xml" );

你不觉得你修改了你的帖子来匹配我的吗? - Braj
1
虽然我已经删除了 classpath:,但这不是问题所在 - ClassPathXmlApplicationContext 可以使用或不使用 classpath 前缀。问题在于双冒号和星号会导致路径无效 :) - Reimeus
我已经测试过后发布了我的答案。它在classpath中不起作用。 - Braj
谢谢大家:看起来像是一个新手错误。 - Vishal K Chadha
直接加载context.xml文件是可行的。ClassPathXmlApplicationContext("/com/springDemo/main/contextBean.xml"); - Vishal K Chadha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接