java中自定义注解

it2022-05-05  154

常用注解

@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自定义注解和运行时靠反射获取注解。


最新回复(0)