without this workaround there is a problem with mutability of headers
with this change / workaround we're ensuring that the headers remain immutable.
We will fix this in Spring Framework 6; Spring Boot 3 in a much better way
fixes gh-1325
without this change whenever a traced executor is created (either via a proxy or directly) we create a new instance of that traced wrapper. The problem with that is such that we create a lot of objects (e.g. each getExecutor() would return a new instance of the traced version). There are projects such as Micrometer that create WeakReferences to those objects. That means that if we don't cache the traced instance then we will lose the WeakReference upon the first GC.
with this change we're introducing new static wrapper methods that cache the traced instance for a given delegate. That means that not only will we create fewer objects but also we will honour the WeakReference mechanisms.
fixes gh-2020
without this change we're not setting tracestate whatsover. Baggage is also not being propagated properly (via the baggage field)
with this change when tracestate is there in the headers it will be treated as baggage. When the context is propagated then tracestate will not be put to the baggage field
fixes gh-2001
Fixes gh-1990
When using `@ValuePropertySource` in reactive web app,
`KafkaSender` bean is getting created before `BeanPostProcessor` populate `@Value`
and as a result topic is passed as `null` in `KafkaSender.Builder` and it throws `NullPointerException`
To resolve this we are using `Environment` to get the property value instead on relying on `BeanPostProcessor`
to populate `@Value`
Handle BeanCreationException instead of just BeanCurrentlyInCreationException.
This handles the case when a cyclic reference (causing a BeanCurrentlyInCreationException) occurs further down the line - when it is not the actuator of that references the in-creation HttpTracing bean, but a dependency of that actuator. In this case the exception that bubbles up here is an UnsatisfiedDependencyException, which is a BeanCreationException