spring总结(七)--注释与spring同时使用的一种方式

使用背景

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名称得到一个实例对象

猜你喜欢

转载自blog.csdn.net/lsx2017/article/details/81356765