我很抱歉,这可能过于含糊,而且存在问题。我试图用大量的弹簧布线来建立一个巨大的遗留项目,我收到了这个错误:
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);
}
答案 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;
}