使用背景
MyBaseUtils.fetchData(params, "NLC001");
NLC001是注释的value值
该方法配置的注释
@ServiceMethod("NLC001") public Map doLogin(Map params) throws Exception { *********** *********** }
注释的定义
注意这里的有个一个value值
@Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface ServiceMethod { String value() default ""; boolean isLocal() default false; }
重点解释下fetchData
核心代码是
Object[] obj = methods.get(txCode);methods对象类型是Map<String, Object[]>
那么methods是怎么构成的呢
methods.put(sm.value(), new Object[]{context.getBean(beanName), m});逐个解释
1:sm对象类型是ServiceMethod(注释名称),来自
sm = AnnotationUtils.findAnnotation(m, ServiceMethod.class);2:m对象类型是Method,来自
ReflectionUtils.getAllDeclaredMethods(beanCls);中的一个值。该方式是获取beanCls中的所有方法(包括子类和所有的超类)3:beanCls对象类型是Class,来自
context.getType(beanName);4:beanName对象类型是String,来自
context.getBeanNamesForType(BaseService.class);中的一个值。发方式是获取继承了BaseService类的所有子类和BaseService类的所有bean的名称。5:context.getBean(beanName),
根据bean名称得到一个实例对象