From 163673ad758ee0d3002973ce37e1500cb467bab7 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Fri, 15 Nov 2024 18:17:58 +0100 Subject: [PATCH] GH-933 - Observability proxying now considers global proxy settings. We now lookup the AbstractAutoProxyCreator registered for global proxy settings and apply that to the ProxyFactory used to create the proxies applying the observability decoration. --- .../observability/ModuleTracingSupport.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleTracingSupport.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleTracingSupport.java index c951d51e..49ed862d 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleTracingSupport.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleTracingSupport.java @@ -20,15 +20,21 @@ import java.util.function.Consumer; import org.springframework.aop.Advisor; import org.springframework.aop.framework.Advised; import org.springframework.aop.framework.ProxyFactory; +import org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator; +import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.lang.Nullable; import org.springframework.scheduling.annotation.AsyncAnnotationAdvisor; /** * @author Oliver Drotbohm */ -class ModuleTracingSupport implements BeanClassLoaderAware { +class ModuleTracingSupport implements BeanClassLoaderAware, BeanFactoryAware { private ClassLoader classLoader; + private @Nullable AbstractAutoProxyCreator creator; /* * (non-Javadoc) @@ -39,6 +45,15 @@ class ModuleTracingSupport implements BeanClassLoaderAware { this.classLoader = classLoader; } + /* + * (non-Javadoc) + * @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org.springframework.beans.factory.BeanFactory) + */ + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + this.creator = beanFactory.getBeanProvider(AbstractAutoProxyCreator.class).getIfAvailable(); + } + protected final Object addAdvisor(Object bean, Advisor advisor) { return addAdvisor(bean, advisor, __ -> {}); } @@ -53,7 +68,12 @@ class ModuleTracingSupport implements BeanClassLoaderAware { } else { - ProxyFactory factory = new ProxyFactory(bean); + var factory = new ProxyFactory(bean); + + if (creator != null) { + factory.copyFrom(creator); + } + customizer.accept(factory); factory.addAdvisor(advisor); @@ -63,7 +83,7 @@ class ModuleTracingSupport implements BeanClassLoaderAware { private static int asyncAdvisorIndex(Advised advised) { - Advisor[] advisors = advised.getAdvisors(); + var advisors = advised.getAdvisors(); for (int i = 0; i < advised.getAdvisorCount(); i++) {