Java NoClassDefFoundError:org/springframework/beans/factory/SmartInitializingSingleton

Java NoClassDefFoundError:org/springframework/beans/factory/SmartInitializingSingleton,java,spring,jmx,spring-jmx,Java,Spring,Jmx,Spring Jmx,我最近在使用SpringJMX时遇到了一个问题。我唯一想做的就是导出一个简单的Springbean,以便使用JConsole进行监控。我的目标是将SpringJMX集成到运行在嵌入式Jetty服务器上的现有SpringWeb应用程序中。但每次启动配置了JMX的应用程序时,我都会遇到以下异常: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframewor

我最近在使用SpringJMX时遇到了一个问题。我唯一想做的就是导出一个简单的Springbean,以便使用JConsole进行监控。我的目标是将SpringJMX集成到运行在嵌入式Jetty服务器上的现有SpringWeb应用程序中。但每次启动配置了JMX的应用程序时,我都会遇到以下异常:

org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.jmx.export.MBeanExporter] for bean with name 'exporter' defined in URL [file:/C:/Users/max.mustermann/workspace_intranetportal/my_webapp/target/classes/META-INF/appContext.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/springframework/beans/factory/SmartInitializingSingleton
谷歌到目前为止帮不了我

我的春豆看起来像这样:

public class JmxTestBean implements IJmxTestBean {

private String  name;
private int     age;
private boolean isTest;

@Override
public int add(int x, int y) {
    return x + y;
}

@Override
public long myOperation() {
    return 10L;
}

@Override
public int getAge() {
    return age;
}

@Override
public void setAge(int age) {
    this.age = age;
}

@Override
public String getName() {
    return name;
}

@Override
public void setName(String name) {
    this.name = name;
}
以下是我添加到Spring的appContext.xml中的行:

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
    <property name="beans">
        <map>
            <entry key="test:name=testBean" value-ref="testBean" />
        </map>
    </property>
</bean>

<bean id="testBean" class="com.big.intranet.test.JmxTestBean">
    <property name="name" value="TEST" />
    <property name="age" value="100" />
</bean>


删除我刚才显示的行,应用程序运行良好。有人知道如何解决这个问题吗?谢谢大家

我已经从spring 4.0.0.RELEASE升级到4.1.5.RELEASE,这解决了我的问题

我也有同样的问题。我将验证器依赖项从Springfoxbean验证器:2.6.1更改为hibernate验证器:5.3.4.Final。然后它就成功了。

正如我在评论中指出的,在使用Spring JMX时,应该遵循两个基本要求:

  • 如前所述,始终确保您的Spring依赖项共享相同的版本,并且如果可能,始终使用最新版本
  • 请注意,bean标记的lazy_init属性至少设置为false(如果我没记错的话,这应该是默认行为)

  • 遵循这些规则,一切都应该顺利进行。谢谢大家的参与

    从堆栈跟踪判断,您正在混合来自不同版本spring的罐子。。不要把不同版本的框架罐混在一起!我实际上混合了不同版本的SpringAOP和SpringBeans。现在异常消失了,Jetty按预期启动,但我的bean仍然没有出现在JConsole中……好了,现在问题解决了。beans标记属性“default lazy init”已设置为“true”,但此行为不适用于Spring MBean。因此,导出器bean要求将“lazy init”属性设置为“false”。然后一切都很好。你升级了Spring core吗?我已经在pom文件中添加了所有Spring jar。如果您不使用maven,那么管理依赖关系将有点困难。我建议使用maven.有道理,看起来SmartInitializingSingleton只是在SpringBeans jar的4.1.0版本中引入的。