From 608337c93da5db9802499a80a4bc8fb3e9d5ae31 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Wed, 2 Jan 2019 20:36:45 +0800 Subject: [PATCH] fixes #227 --- .../custom/SentinelBeanPostProcessor.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelBeanPostProcessor.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelBeanPostProcessor.java index d9e9cd7ee..dd84109e9 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelBeanPostProcessor.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelBeanPostProcessor.java @@ -28,6 +28,7 @@ import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.cloud.alibaba.sentinel.annotation.SentinelRestTemplate; import org.springframework.context.ApplicationContext; import org.springframework.core.type.StandardMethodMetadata; +import org.springframework.core.type.classreading.MethodMetadataReadingVisitor; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; @@ -49,9 +50,16 @@ public class SentinelBeanPostProcessor implements MergedBeanDefinitionPostProces public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class beanType, String beanName) { if (checkSentinelProtect(beanDefinition, beanType)) { - SentinelRestTemplate sentinelRestTemplate = ((StandardMethodMetadata) beanDefinition - .getSource()).getIntrospectedMethod() - .getAnnotation(SentinelRestTemplate.class); + SentinelRestTemplate sentinelRestTemplate; + if (beanDefinition.getSource() instanceof StandardMethodMetadata) { + sentinelRestTemplate = ((StandardMethodMetadata) beanDefinition + .getSource()).getIntrospectedMethod() + .getAnnotation(SentinelRestTemplate.class); + } + else { + sentinelRestTemplate = beanDefinition.getResolvedFactoryMethod() + .getAnnotation(SentinelRestTemplate.class); + } cache.put(beanName, sentinelRestTemplate); } } @@ -59,11 +67,22 @@ public class SentinelBeanPostProcessor implements MergedBeanDefinitionPostProces private boolean checkSentinelProtect(RootBeanDefinition beanDefinition, Class beanType) { return beanType == RestTemplate.class - && beanDefinition.getSource() instanceof StandardMethodMetadata + && (checkStandardMethodMetadata(beanDefinition) + || checkMethodMetadataReadingVisitor(beanDefinition)); + } + + private boolean checkStandardMethodMetadata(RootBeanDefinition beanDefinition) { + return beanDefinition.getSource() instanceof StandardMethodMetadata && ((StandardMethodMetadata) beanDefinition.getSource()) .isAnnotated(SentinelRestTemplate.class.getName()); } + private boolean checkMethodMetadataReadingVisitor(RootBeanDefinition beanDefinition) { + return beanDefinition.getSource() instanceof MethodMetadataReadingVisitor + && ((MethodMetadataReadingVisitor) beanDefinition.getSource()) + .isAnnotated(SentinelRestTemplate.class.getName()); + } + @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {