From df76f1497a18aca136942c9a5afa9d74efe1f485 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 25 Nov 2012 20:18:59 +0100 Subject: [PATCH] Replaced use of EmbeddedValueResolverAware with ConfigurableBeanFactory's resolveEmbeddedValue in order to avoid a package cycle with the org.springframework.context package Issue: SPR-10021 --- .../AnnotationJmxAttributeSource.java | 18 ++++++++++++++---- .../annotation/AnnotationMBeanExporter.java | 11 ++++++----- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/jmx/export/annotation/AnnotationJmxAttributeSource.java b/spring-context/src/main/java/org/springframework/jmx/export/annotation/AnnotationJmxAttributeSource.java index 8ac3f93501e..4603a4d320b 100644 --- a/spring-context/src/main/java/org/springframework/jmx/export/annotation/AnnotationJmxAttributeSource.java +++ b/spring-context/src/main/java/org/springframework/jmx/export/annotation/AnnotationJmxAttributeSource.java @@ -20,7 +20,9 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Method; import org.springframework.beans.annotation.AnnotationBeanUtils; -import org.springframework.context.EmbeddedValueResolverAware; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.jmx.export.metadata.InvalidMetadataException; import org.springframework.jmx.export.metadata.JmxAttributeSource; @@ -45,13 +47,21 @@ import org.springframework.util.StringValueResolver; * @see org.springframework.jmx.export.annotation.ManagedAttribute * @see org.springframework.jmx.export.annotation.ManagedOperation */ -public class AnnotationJmxAttributeSource implements JmxAttributeSource, EmbeddedValueResolverAware { +public class AnnotationJmxAttributeSource implements JmxAttributeSource, BeanFactoryAware { private StringValueResolver embeddedValueResolver; - public void setEmbeddedValueResolver(StringValueResolver resolver) { - this.embeddedValueResolver = resolver; + public void setBeanFactory(final BeanFactory beanFactory) { + if (beanFactory instanceof ConfigurableBeanFactory) { + // Not using EmbeddedValueResolverAware in order to avoid a spring-context dependency: + // ConfigurableBeanFactory and its resolveEmbeddedValue live in the spring-beans module. + this.embeddedValueResolver = new StringValueResolver() { + public String resolveStringValue(String strVal) { + return ((ConfigurableBeanFactory) beanFactory).resolveEmbeddedValue(strVal); + } + }; + } } diff --git a/spring-context/src/main/java/org/springframework/jmx/export/annotation/AnnotationMBeanExporter.java b/spring-context/src/main/java/org/springframework/jmx/export/annotation/AnnotationMBeanExporter.java index 681bd157242..1eaf7c65969 100644 --- a/spring-context/src/main/java/org/springframework/jmx/export/annotation/AnnotationMBeanExporter.java +++ b/spring-context/src/main/java/org/springframework/jmx/export/annotation/AnnotationMBeanExporter.java @@ -16,11 +16,10 @@ package org.springframework.jmx.export.annotation; -import org.springframework.context.EmbeddedValueResolverAware; +import org.springframework.beans.factory.BeanFactory; import org.springframework.jmx.export.MBeanExporter; import org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler; import org.springframework.jmx.export.naming.MetadataNamingStrategy; -import org.springframework.util.StringValueResolver; /** * Convenient subclass of Spring's standard {@link MBeanExporter}, @@ -34,7 +33,7 @@ import org.springframework.util.StringValueResolver; * @author Juergen Hoeller * @since 2.5 */ -public class AnnotationMBeanExporter extends MBeanExporter implements EmbeddedValueResolverAware { +public class AnnotationMBeanExporter extends MBeanExporter { private final AnnotationJmxAttributeSource annotationSource = new AnnotationJmxAttributeSource(); @@ -65,8 +64,10 @@ public class AnnotationMBeanExporter extends MBeanExporter implements EmbeddedVa this.metadataNamingStrategy.setDefaultDomain(defaultDomain); } - public void setEmbeddedValueResolver(StringValueResolver resolver) { - this.annotationSource.setEmbeddedValueResolver(resolver); + @Override + public void setBeanFactory(BeanFactory beanFactory) { + super.setBeanFactory(beanFactory); + this.annotationSource.setBeanFactory(beanFactory); } }