NoClassDefFoundError:org / springframework / beans / factory / SmartInitializingSingleton

时间:2015-03-23 08:59:53

标签: java spring jmx spring-jmx

我最近使用Spring JMX遇到了一个问题。我唯一想要达到的是使用JConsole导出一个简单的Spring Bean进行监控。我的目标是将Spring JMX集成到在嵌入式Jetty服务器上运行的现有Spring Web应用程序中。但每次我启动配置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
到目前为止谷歌无法帮助我。

My Spring Bean看起来像这样:

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>

删除我刚刚向您展示的行,应用程序正常运行。有谁知道如何解决这个问题?谢谢大家!

3 个答案:

答案 0 :(得分:3)

我从春季4.0.0.RELEASE更新到4.1.5.RELEASE,这解决了我的问题。

答案 1 :(得分:0)

我有同样的问题。我将验证器依赖项从springfox-bean-validators更改为:2.6.1到hibernate-validator:5.3.4.Final。然后它奏效了。

答案 2 :(得分:0)

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

  1. 正如M.Deinum所解释的那样,始终确保您的Spring依赖项共享相同的版本,并且 - 如果可能 - 始终使用最新版本。
  2. 请注意,bean标记的 lazy_init 属性至少设置为 false (如果我没记错的话,这应该是默认行为)。
  3. 遵循这些规则,一切都应该运作良好。谢谢大家参与!