未在bean定义上指定bean类

问题描述 投票:6回答:2

[抱歉,这个问题太含糊和笼统。我正在尝试使用大量的弹簧接线来启动一个庞大的旧项目,并且出现此错误:

奇怪的是,此错误不会告诉我发生在哪个xml,哪个bean id上。

我当然不希望有人指出我要修复的地方。.[[我的问题是,弹簧专家甚至如何调试这种无意义的错误消息?

是的,我知道这一定是我的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); }

java spring spring-bean
2个回答
1
投票
这是失败的一部分您可以尝试在抛出异常的地方设置一个断点。或添加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; }


1
投票
我的问题是,春季专家甚至如何调试这种错误的错误消息?

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

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

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

这些就是我要开始的事情。

© www.soinside.com 2019 - 2024. All rights reserved.