NoClassDefFoundError: org/springframework/beans/factory/SmartInitializingSingleton
NoClassDefFoundError: org/springframework/beans/factory/SmartInitializingSingleton
我最近 运行 遇到了使用 Spring JMX 的问题。我唯一想要达到的目的是导出一个简单的 Spring Bean 以使用 JConsole 进行监视。我的目标是将 Spring JMX 集成到嵌入式 Jetty 服务器上的现有 Spring Web 应用程序 运行 中。但是每次我启动将 JMX 配置为 im 运行 的应用程序时,都会出现以下异常:
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
Google 到目前为止帮不了我。
我的 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>
删除我刚刚向您展示的行,应用程序 运行 没问题。有谁知道如何解决这个问题?谢谢大家!
我已经从 spring 4.0.0.RELEASE 更新到 4.1.5.RELEASE,这解决了我的问题。
我遇到了同样的问题。我将验证器依赖项从 springfox-bean-validators:2.6.1 更改为 hibernate-validator:5.3.4.Final。然后就成功了。
正如我在评论中指出的那样,在使用 Spring JMX 时应遵循两个基本要求:
- 正如 M.Deinum 所解释的,始终确保您的 Spring 依赖项共享相同的版本,并且 - 如果可能 - 始终使用最新版本。
- 注意 bean 标签的 lazy_init 属性至少设置为 false(这应该是默认行为如果我没记错的话)。
遵循这些规则,一切都应该运作良好。感谢大家的参与!
我最近 运行 遇到了使用 Spring JMX 的问题。我唯一想要达到的目的是导出一个简单的 Spring Bean 以使用 JConsole 进行监视。我的目标是将 Spring JMX 集成到嵌入式 Jetty 服务器上的现有 Spring Web 应用程序 运行 中。但是每次我启动将 JMX 配置为 im 运行 的应用程序时,都会出现以下异常:
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
Google 到目前为止帮不了我。
我的 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>
删除我刚刚向您展示的行,应用程序 运行 没问题。有谁知道如何解决这个问题?谢谢大家!
我已经从 spring 4.0.0.RELEASE 更新到 4.1.5.RELEASE,这解决了我的问题。
我遇到了同样的问题。我将验证器依赖项从 springfox-bean-validators:2.6.1 更改为 hibernate-validator:5.3.4.Final。然后就成功了。
正如我在评论中指出的那样,在使用 Spring JMX 时应遵循两个基本要求:
- 正如 M.Deinum 所解释的,始终确保您的 Spring 依赖项共享相同的版本,并且 - 如果可能 - 始终使用最新版本。
- 注意 bean 标签的 lazy_init 属性至少设置为 false(这应该是默认行为如果我没记错的话)。
遵循这些规则,一切都应该运作良好。感谢大家的参与!