bean定义上没有指定bean类

时间:2014-06-05 04:15:20

标签: java spring spring-bean

我很抱歉,这可能过于含糊,而且存在问题。我试图用大量的弹簧布线来建立一个巨大的遗留项目,我收到了这个错误:

bizzare事情是这个错误没告诉我哪个xml,哪个bean id,发生错误。

我当然不希望任何人指出我要修复的地方.. 我的问题是,Spring专家如何调试这种无法提供信息的错误消息?

是的,我明白它必须是我的错误设置的一个xml bean。但不应该错误信息让我更容易找出哪个bean?

任何建议都会非常感激。

00:09:00.640 [main] ERROR com.xxxx.yyyy.zzzzzz.AppMain - Failed to initialize BLAH BLAH BLAH
java.lang.IllegalStateException: No bean class specified on bean definition
        at org.springframework.beans.factory.support.AbstractBeanDefinition.getBeanClass(AbstractBeanDefinition.java:381) ~[spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:154) ~[spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035) ~[spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939) ~[spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) ~[spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) ~[spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]

通过以下代码抛出它。 init()方法接受spring xml文件并进行连接。

try {
    AppMain.init(args_);
} catch (Exception e) {
    _LOGGER.error("Failed to initialize BLAH BLAH BLAH", e);
    System.exit(-1);
}

2 个答案:

答案 0 :(得分:2)

  

我的问题是,春季专家怎么调试这种   没有信息的错误信息?

我认为错误信息非常有用。它声明某些东西试图将您的应用程序置于非法状态。在此特定示例中,您的上下文是以未指定某个bean类的方式配置的。这通常是由于忘记在class声明中放置<bean>属性而导致的。

Spring为您上下文中的每个bean创建BeanDefinition个对象。这些可以来自您的<bean>声明或其他XML元素或Java配置元素(来自@Configuration@Component等)。 Spring ApplicationContext中涉及的几乎所有内容都是bean。

你可以非常肯定Spring的基础设施bean不应该为此负责。 Spring是一个已建立的框架,其中包含大量工作并在每次发布之前完成测试。显而易见的替代方案是,在代码中的某处您忘记指定class。例如,您是否尝试制作abstract <bean>,但忘记添加abstract="true"?您是否注册了BeanDefinitionParser并在没有BeanDefinition的情况下创建了class?您是否创建了BeanDefinitionPostProcessor并删除了BeanDefinition class个值?

这些是我要开始的事情。

答案 1 :(得分:1)

这是失败的消息来源 您可以尝试在Exception投掷中设置断点。或者添加spring代码而不是jar文件并尝试在那里进行调试。

public Class<?> getBeanClass() throws IllegalStateException {
        Object beanClassObject = this.beanClass;
        if (beanClassObject == null) {
            throw new IllegalStateException("No bean class specified on bean definition");
        }
        if (!(beanClassObject instanceof Class)) {
            throw new IllegalStateException(
                    "Bean class name [" + beanClassObject + "] has not been resolved into an actual Class");
        }
        return (Class) beanClassObject;
    }