diff --git a/org.springframework.context/src/main/java/org/springframework/jmx/export/MBeanExporter.java b/org.springframework.context/src/main/java/org/springframework/jmx/export/MBeanExporter.java index ccd1973f9a1fcef107dac684456cd6d420b50387..6b02d5b92de7b36ac1ae357f448aeec077f4438e 100644 --- a/org.springframework.context/src/main/java/org/springframework/jmx/export/MBeanExporter.java +++ b/org.springframework.context/src/main/java/org/springframework/jmx/export/MBeanExporter.java @@ -44,7 +44,6 @@ import org.springframework.aop.target.LazyInitTargetSource; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; -import org.springframework.beans.factory.BeanIsAbstractException; import org.springframework.beans.factory.CannotLoadBeanClassException; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; @@ -873,7 +872,7 @@ public class MBeanExporter extends MBeanRegistrationSupport beanNames.addAll(Arrays.asList(((ConfigurableBeanFactory) this.beanFactory).getSingletonNames())); } for (String beanName : beanNames) { - if (!isExcluded(beanName)) { + if (!isExcluded(beanName) && !isBeanDefinitionAbstract(this.beanFactory, beanName)) { try { Class beanClass = this.beanFactory.getType(beanName); if (beanClass != null && callback.include(beanClass, beanName)) { @@ -900,9 +899,6 @@ public class MBeanExporter extends MBeanRegistrationSupport } // otherwise ignore beans where the class is not resolvable } - catch (BeanIsAbstractException ex) { - // ignore - can't expose an abstract bean - } } } } @@ -917,6 +913,14 @@ public class MBeanExporter extends MBeanRegistrationSupport this.excludedBeans.contains(beanName.substring(BeanFactory.FACTORY_BEAN_PREFIX.length()))))); } + /** + * Return whether the specified bean definition should be considered as abstract. + */ + private boolean isBeanDefinitionAbstract(ListableBeanFactory beanFactory, String beanName) { + return (beanFactory instanceof ConfigurableListableBeanFactory && beanFactory.containsBeanDefinition(beanName) && + ((ConfigurableListableBeanFactory) beanFactory).getBeanDefinition(beanName).isAbstract()); + } + //--------------------------------------------------------------------- // Notification and listener management diff --git a/org.springframework.context/src/test/java/org/springframework/jmx/export/autodetectMBeans.xml b/org.springframework.context/src/test/java/org/springframework/jmx/export/autodetectMBeans.xml index 83d7ae46ad1c46c7e5cb4b0e2f00c4ed9eb2ad46..d028b5274c0ff1ff12a210a1232264ebc7f409ed 100644 --- a/org.springframework.context/src/test/java/org/springframework/jmx/export/autodetectMBeans.xml +++ b/org.springframework.context/src/test/java/org/springframework/jmx/export/autodetectMBeans.xml @@ -25,4 +25,6 @@ + +