未在bean定义上指定bean类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未在bean定义上指定bean类相关的知识,希望对你有一定的参考价值。

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

奇怪的是,此错误不会告诉我发生在哪个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);

答案
这是失败的一部分您可以尝试在抛出异常的地方设置一个断点。或添加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;

另一答案
我的问题是,春季专家甚至如何调试这种错误的错误消息?

我认为错误消息非常有用。它指出某些事情试图将您的应用程序置于非法状态。在此特定示例中,以未指定某些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值?

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

以上是关于未在bean定义上指定bean类的主要内容,如果未能解决你的问题,请参考以下文章

Spring的ioc的扫描器与bean的作用域与生命周期

Spring的ioc的扫描器与bean的作用域与生命周期

Spring的ioc的扫描器与bean的作用域与生命周期

Bean配置(注解)

JSF 2 selectOneRadio未在Bean中设置值[重复]

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段