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