Open LeoTan2004 opened 6 months ago
SpringAOP获取注解的方式
RequestMapping base = AnnotationUtils.getAnnotation(beanClass, RequestMapping.class);
这种方式能不仅能够获取直接使用在这个类上面的注解,也可以获取该类上的注解的元注解。 我们以RequestMapping和PostMapping为例(简化后)
RequestMapping
PostMapping
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String[] value() default {}; }
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = RequestMethod.POST) public @interface PostMapping { @AliasFor(annotation = RequestMapping.class) String[] value() default {}; }
测试用例
import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping; @PostMapping("test") class PostController{ } public class Test{ public static void main(String[] args) { RequestMapping base = AnnotationUtils.getAnnotation(PostController.class, RequestMapping.class); // 这里不仅base不会为空,而且PostMapping中的值还会传递给RequestMapping System.out.println(base.value()); } }
使用SpringAOP提供的方式获取注解,就相当于注解获得了继承和多态的特性,这也给之后的扩展提供了更大的空间。
SpringAOP获取注解的方式
这种方式能不仅能够获取直接使用在这个类上面的注解,也可以获取该类上的注解的元注解。 我们以
RequestMapping
和PostMapping
为例(简化后)测试用例