java中自定义注解

常用注解

@Override,表示当前的方法定义将覆盖超类中的方法。
@Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。
@SuppressWarnings,关闭不当编辑器警告信息。

Java还提供了4中注解,专门负责新注解的创建:

@Target:

表示该注解可以用于什么地方,可能的ElementType参数有:
CONSTRUCTOR:构造器的声明
FIELD:域声明(包括enum实例)
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明
PARAMETER:参数声明
TYPE:类、接口(包括注解类型)或enum声明

@Retention

表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
SOURCE:注解将被编译器丢弃
CLASS:注解在class文件中可用,但会被VM丢弃
RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息

@Document

将注解包含在Javadoc中

@Inherited

允许子类继承父类中的注解

demo

首先创建一个注解类

//表示该注解可以用于什么地方
@Target(ElementType.METHOD)
//表示需要在什么级别保存该注解信息
@Retention(RetentionPolicy.RUNTIME)
//将注解包含在Javadoc中
@Documented
public @interface WxCheck {
    /**
     * 方法
     *
     * @return
     */
    SecurityMethod method() default SecurityMethod.NULL;
    /**
     * @return
     */
    String value();

    /**
     * 需要检测的参数
     */
    String[] params() default {};
}

然后使用注解

    @PostMapping(value = "/xxxx/xxx")
    @WxCheck(value = "notice", targetClass = ClubActivityController.class)
    public DTOResult<List<ClubNoticeEntity>> addNotice(@RequestBody ClubNoticeDTO clubNoticeDTO) {
         ......
        return rlt.withSuccess(list);
    }

最后我们来测试我们写的注解:

    @Pointcut("@annotation(com.xxx.xxx.WxCheck)")
    public void contentDetectionCheck() {
        System.out.println("wx check ContentDetection!");
    }

    @Around(value = "contentDetectionCheck() && @annotation(demo)", argNames = "pjp,demo")
    public DTOResult contentDetectionCheckAround(ProceedingJoinPoint pjp, WxCheck demo) {
       ....
       return new DTOResult().withSuccess();
    }

总结:

java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中java自定义注解和运行时靠反射获取注解。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容