自定义注解
一、什么是注解?
注解是一种能被添加到java源代码中的元数据
,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包
上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。
二、自定义注解需要的基本元素
自定义注解需要用到的东西:
修饰符:访问修饰符必须为public,不写的话默认为public;
关键字:关键字为@interface;
注解名称:注解名称为自定义注解的名称,使用时候会用到;
注解类型元素:注解类型元素是注解中的内容,可以理解成自定义接口的实现部分;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
@Documented
public @interface PermissionData{
/**
* 暂时没用
* @return
*/
String value() default "";
/**
* 配置菜单的组件路径,用于数据权限
*/
String pageComponent() default "";
}
三、自定义注解用到的元注解
JDK中有一些元注解,主要有@Targert,@Rentention,@Document,@Inherited用来修饰注解。
@Target:表明该注解可以应用的java元素类型
Target类型 | 描述 |
---|---|
ElementType.TYPE | 应用于类、接口(包括注解类型)、枚举 |
ElementType.METHOD | 应用于方法 |
ElementType.FIELD | 应用于属性(包括枚举中的常量) |
ElementType.CONSTRUCTOR | 应用于构造函数 |
ElementType.Package | 应用于包 |
ElementType.Parameter | 应用于方法的形参 |
ElementType.local_variable | 应用于局部变量 |
ElementType.AnnotationType | 应用于注解的类型 |
@Retention:表明该注解的生命周期
生命周期类型 | 描述 |
---|---|
RetentionPolicy.RUNTIME | 由jvm加载,包含在类文件中,在运行时可以被获取到 |
RetentionPolicy.Class | jvm加载时丢弃,包含在类文件中,默认值 |
RetentionPolicy.Source | 编译时被丢弃,不包含在类文件中 |
@Doucument:表明该注解的元素可以被javadoc或类似的根据文档化
@Inherited:表明使用了@Inherited注解的元素,所标记的子类也拥有这个注解
自定义注解的使用:
/**
* 导出excel
*
* @param request
* @param hrAttendaceExtraWork
*/
@RequestMapping(value = "/exportXls")
@RequiresPermissions("hrAttendaceExtraWork:exportXls")
@PermissionData(pageComponent = "staffManage/attendanceMange/HrAttendaceExtraWorkList")
public ModelAndView exportXls(HttpServletRequest request, HrAttendaceExtraWork hrAttendaceExtraWork) {
return super.exportXls(request, hrAttendaceExtraWork, HrAttendaceExtraWork.class, "加班申请");
}