- 注解无法根据class直接newInstance出一个实例
- 根据Class中的createAnnotationData方法,可以看出注解的生成在AnnotationParser.parseAnnotations()中完成
- 最终调用AnnotationParser.annotationForMap(注解类,注解属性)方法生成注解实例
- 只有注解属性包含的,才会生成方法和方法返回值
private RocketMQMessageListener instanceRocketMQMessageListener(String tag) {
//获取注解默认属性
AnnotationType instance = AnnotationType.getInstance(RocketMQMessageListener.class);
Map<String, Object> stringObjectMap = instance.memberDefaults();
// 完善注解必填属性
stringObjectMap.put("topic", "ZT-TOPIC");
stringObjectMap.put("consumerGroup", "newProducer");
stringObjectMap.put("selectorExpression", tag);
//反射生成实例
return (RocketMQMessageListener) AnnotationParser.annotationForMap(RocketMQMessageListener.class, stringObjectMap);
}
网友评论