Skip to content

Commit

Permalink
修复aop下无法获取@RocketMQMessageListener的bug
Browse files Browse the repository at this point in the history
  • Loading branch information
javahongxi committed Jun 10, 2020
1 parent 4e60b37 commit 4263b4b
Showing 1 changed file with 13 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,15 @@
import org.apache.rocketmq.spring.starter.enums.ConsumeMode;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionValidationException;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
Expand Down Expand Up @@ -115,9 +118,11 @@ public RocketMQTemplate rocketMQTemplate(DefaultMQProducer mqProducer,
@EnableConfigurationProperties(RocketMQProperties.class)
@ConditionalOnProperty(prefix = "spring.rocketmq", value = "nameServer")
@Order
public static class ListenerContainerConfiguration implements ApplicationContextAware, InitializingBean {
public static class ListenerContainerConfiguration implements ApplicationContextAware, BeanFactoryAware, InitializingBean {
private ConfigurableApplicationContext applicationContext;

private DefaultListableBeanFactory beanFactory;

private AtomicLong counter = new AtomicLong(0);

@Resource
Expand Down Expand Up @@ -159,7 +164,8 @@ private void registerContainer(String beanName, Object bean) {
}

RocketMQListener rocketMQListener = (RocketMQListener) bean;
RocketMQMessageListener annotation = clazz.getAnnotation(RocketMQMessageListener.class);
GenericBeanDefinition bd = (GenericBeanDefinition) beanFactory.getBeanDefinition(beanName);
RocketMQMessageListener annotation = bd.getBeanClass().getAnnotation(RocketMQMessageListener.class);
validate(annotation);
BeanDefinitionBuilder beanBuilder = BeanDefinitionBuilder.rootBeanDefinition(DefaultRocketMQListenerContainer.class);
String nameServer = rocketMQProperties.getNameServer();
Expand Down Expand Up @@ -209,6 +215,11 @@ private void validate(RocketMQMessageListener annotation) {
annotation.messageModel() == MessageModel.BROADCASTING)
throw new BeanDefinitionValidationException("Bad annotation definition in @RocketMQMessageListener, messageModel BROADCASTING does not support ORDERLY message!");
}

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = (DefaultListableBeanFactory) beanFactory;
}
}

}

0 comments on commit 4263b4b

Please sign in to comment.