Resolving consumer beans from CGLIB proxy classes created by @Configuration - #596
Resolving consumer beans from CGLIB proxy classes created by @Configuration#596yx-Yaoxaing wants to merge 1 commit into
Conversation
RockteMQ-AI
left a comment
There was a problem hiding this comment.
Review: Approved ✅
PR: #596 — Resolving consumer beans from CGLIB proxy classes created by @configuration
Type: Bug fix (1 file, +1/-1)
Assessment
Uses ClassUtils.getUserClass() to unwrap CGLIB proxy classes, allowing @Configuration annotated classes to be correctly identified as RocketMQ consumer listeners.
Verdict
✅ Minimal, correct fix for Spring proxy class handling.
🤖 Automated review by oss-sentinel-ai
|
This PR has conflicts with the base branch and cannot be merged. Please rebase or merge the base branch into your branch and resolve the conflicts: git fetch origin
git checkout master
git rebase origin/main
# resolve conflicts, then:
git push --force-with-leaseThis is a one-time reminder. Feel free to @mention me for a re-review after conflicts are resolved. Automated notification by github-manager-bot |
RockteMQ-AI
left a comment
There was a problem hiding this comment.
Summary
Fix for resolving consumer beans from CGLIB proxy classes created by @Configuration. Switches from targetClass.getAnnotation() to AnnotationUtils.findAnnotation() which correctly traverses the annotation hierarchy including proxied classes.
Findings
- [Info]
AnnotationUtils.findAnnotation()is the correct choice here — it handles CGLIB proxies, meta-annotations, and inherited annotations, whereasgetAnnotation()only checks the immediate class.
LGTM.
What is the purpose of the change
Originally, when annotating a class with @configuration, it couldn't be resolved as a RocketMQ consumer listener class. I changed the way annotations are parsed, allowing classes marked with @configuration to be correctly identified as RocketMQ consumer listener classes. This is because, in our practice at the company, many people also prefer using @configuration.
Brief changelog
In the postProcessAfterInitialization() method of the RocketMQMessageListenerBeanPostProcessor message listener post-processor, I changed the annotation processing approach to:
RocketMQMessageListener ann = (RocketMQMessageListener) AnnotationUtils.findAnnotation(targetClass, RocketMQMessageListener.class);
This modification allows both @configuration and @service annotated classes to function as consumer listeners.
Verifying this change
In production and actively deployed.
RocketMQMessageListener ann = AnnotationUtils.findAnnotation(targetClass, RocketMQMessageListener.class);