|
56 | 56 | public class ReferenceAnnotationBeanPostProcessor implements BeanPostProcessor,
|
57 | 57 | ApplicationContextAware, PriorityOrdered {
|
58 | 58 |
|
59 |
| - private static final Logger LOGGER = SofaBootLoggerFactory |
60 |
| - .getLogger(ReferenceAnnotationBeanPostProcessor.class); |
| 59 | + private static final Logger LOGGER = SofaBootLoggerFactory |
| 60 | + .getLogger(ReferenceAnnotationBeanPostProcessor.class); |
61 | 61 |
|
62 |
| - private final SofaRuntimeContext sofaRuntimeContext; |
| 62 | + private final SofaRuntimeContext sofaRuntimeContext; |
63 | 63 |
|
64 |
| - private final BindingAdapterFactory bindingAdapterFactory; |
| 64 | + private final BindingAdapterFactory bindingAdapterFactory; |
65 | 65 |
|
66 |
| - private final BindingConverterFactory bindingConverterFactory; |
| 66 | + private final BindingConverterFactory bindingConverterFactory; |
67 | 67 |
|
68 |
| - private ApplicationContext applicationContext; |
| 68 | + private ApplicationContext applicationContext; |
69 | 69 |
|
70 |
| - private AnnotationWrapper<SofaReference> annotationWrapper; |
| 70 | + private final ThreadLocal<AnnotationWrapper<SofaReference>> annotationWrapper = new ThreadLocal<>(); |
71 | 71 |
|
72 | 72 | /**
|
73 | 73 | * To construct a ReferenceAnnotationBeanPostProcessor via a Spring Bean
|
@@ -97,7 +97,10 @@ private void processSofaReference(final Object bean, String beanName) {
|
97 | 97 | return;
|
98 | 98 | }
|
99 | 99 |
|
100 |
| - sofaReferenceAnnotation = annotationWrapper.wrap(sofaReferenceAnnotation); |
| 100 | + if (annotationWrapper.get() == null) { |
| 101 | + annotationWrapper.set(createAnnotationWrapper()); |
| 102 | + } |
| 103 | + sofaReferenceAnnotation = annotationWrapper.get().wrap(sofaReferenceAnnotation); |
101 | 104 |
|
102 | 105 | Class<?> interfaceType = sofaReferenceAnnotation.interfaceType();
|
103 | 106 | if (interfaceType.equals(void.class)) {
|
@@ -130,7 +133,10 @@ private void processSofaReference(final Object bean, String beanName) {
|
130 | 133 | return;
|
131 | 134 | }
|
132 | 135 |
|
133 |
| - sofaReferenceAnnotation = annotationWrapper.wrap(sofaReferenceAnnotation); |
| 136 | + if (annotationWrapper.get() == null) { |
| 137 | + annotationWrapper.set(createAnnotationWrapper()); |
| 138 | + } |
| 139 | + sofaReferenceAnnotation = annotationWrapper.get().wrap(sofaReferenceAnnotation); |
134 | 140 |
|
135 | 141 | Class<?> interfaceType = sofaReferenceAnnotation.interfaceType();
|
136 | 142 | if (interfaceType.equals(void.class)) {
|
@@ -182,8 +188,12 @@ public int getOrder() {
|
182 | 188 | @Override
|
183 | 189 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
184 | 190 | this.applicationContext = applicationContext;
|
185 |
| - this.annotationWrapper = AnnotationWrapper.create(SofaReference.class) |
186 |
| - .withEnvironment(applicationContext.getEnvironment()) |
| 191 | + this.annotationWrapper.set(createAnnotationWrapper()); |
| 192 | + } |
| 193 | + |
| 194 | + private AnnotationWrapper<SofaReference> createAnnotationWrapper() { |
| 195 | + return AnnotationWrapper.create(SofaReference.class) |
| 196 | + .withEnvironment(this.applicationContext.getEnvironment()) |
187 | 197 | .withBinder(DefaultPlaceHolderBinder.INSTANCE);
|
188 | 198 | }
|
189 | 199 | }
|
0 commit comments