反射生成注解实例

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

你可能感兴趣的:(反射生成注解实例)