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.
This commit is contained in:
Oliver Drotbohm
2024-11-15 18:17:58 +01:00
parent 22f758ab79
commit 163673ad75

View File

@@ -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++) {