Java:自定义注解(Annotation)

在网上找了很多资料也有写的比较好的,但是总有有一点半点的细节没有写出来,在这里自己总结下使用。

使用Java的自定义注解,首先个人需要了解下Java为我们提供的元注解和相关定义注解的语法。(这个我在网上选择了一篇详细的介绍链接在文章最底层)



1、首先自定义我们需要的注解

package com.plat;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/*
* @Retention(RetentionPolicy.SOURCE)
* 这个注解的意思是让MyAnnotation注解只在java源文件中存在,编译成.class文件后注解就不存在了
* @Retention(RetentionPolicy.CLASS)
* 这个注解的意思是让MyAnnotation注解在java源文件(.java文件)中存在,编译成.class文件后注解也还存在,
* 被MyAnnotation注解类标识的类被类加载器加载到内存中后MyAnnotation注解就不存在了
*/
/*
* 这里是在注解类MyAnnotation上使用另一个注解类,这里的Retention称为元注解。
* Retention注解括号中的"RetentionPolicy.RUNTIME"意思是让MyAnnotation这个注解的生命周期一直程序运行时都存在
*/
//Target注解决定MyAnnotation注解可以加在哪些成分上,如加在类身上,或者属性身上,或者方法身上等成分
/**
 * @author jwkang
 *是否需要判断权限,默认为true需要判断权限,设定为false的情况下不判断权限
 */
@Documented
@Inherited
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PlatPermission {

    boolean validate() default true;
}

2、将自定义注解标识在不需要判断权限的方法上

    @PlatPermission(validate=false)
    @RequestMapping(value = "/getSelect", method = {RequestMethod.POST})
    @ResponseBody
    public BaseOutModel GetSelect(String selectType) {
        BaseOutModel result = new BaseOutModel();
        LinkedHashMap<String, String> data = new LinkedHashMap<String, String>();
        try {

            if(!TypeOfEnum.contains(selectType))
            {
                result.setResult(false);
                result.setErrorMessage("未找到对应信息");
                return result;
            }
            TypeOfEnum typeOfEnum = TypeOfEnum.get(selectType);
            data = EnumHelp.getZEnumDesList(typeOfEnum.getType());
            result.setResult(true);
            result.setResponse(data);
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("operateEmail err", e.toString());
            result.setResult(false);
            result.setErrorMessage("系统异常!请重试...");
            return result;
        }
        return result;
    }

3、进行权限的管控

jar包的引用:

import org.springframework.web.method.HandlerMethod;

权限的控制,注解读取

public class PlatHandlerInterceptorAdapter extends HandlerInterceptorAdapter {
    private static final ILog logger = LogManager.getLogger(PlatHandlerInterceptorAdapter.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        //处理Permission Annotation,实现方法级权限控制
        //HandlerMethod 需要对应Jar包的位置,否则会一直为false
        if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {
            PlatPermission permission = ((HandlerMethod) handler).getMethodAnnotation(PlatPermission.class);//开始使用注解
            if (permission == null || permission.validate()) {  //注解标识需要判断权限
                // 权限判断,没有权限则跳转至无权限页面,有权限则走正常流程
                XXXXX
            }
        }

        return super.preHandle(request, response, handler);
    }
}

4、完成,整个一套的注解使用



Java注解:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html

时间: 2024-11-05 14:49:20

Java:自定义注解(Annotation)的相关文章

Java自定义注解Annotation详解

注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事.标记可以加在包,类,字段,方法,方法的参数以及局部变量上. 自定义注解及其应用 1).定义一个最简单的注解 public @interface MyAnnotation { //...... } 2).把注解加在某个类上: @MyAnnotation public class Annot

Java自定义注解Annotation的使用

从 jdk5开始,Java增加了对元数据的支持,也就是Annotation,Annotation其实就是对代码的一种特殊标记,这些标记可以在编译,类加载和运行时被读取,并执行相应的处理.当然刚刚说了,Annotation只是一种标记,所以要是在代码里面不用这些标记也是能完成相应的工作的,只是有时候用注解能简化很多代码,看起来非常的简洁. 常见的注解(Annotation) @Override——限定重写父类方法 @Deprecated——标示已过时 @SuppressWarning——抑制编译器

java自定义注解类

一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Tar

Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义.解析,并对几个 Android 开源库 Annotation 原理进行简析.PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 完整版原文见:Java Android 注解(Ann

深入 Java自定义注解

我们在使用Spring框架的时候,会经常使用类似:@Autowired 这样的注解.我们也可以自己定义一些注解.Java的注解主要在包:java.lang.annotation中实现. 1. 元注解 什么是元注解?你可以这样理解,元注解是自定义注解的注解.元注解主要包含4个.他们主要在java.lang.annotation中可以找到.我们自己要创建注解的时候必须要用到这些元注解.所以必须彻底理解这四个元注解的含义. 1. @Documented 2. @Inherited 3. @Retent

spring中自定义注解(annotation)与AOP中获取注解

一.自定义注解(annotation) 自定义注解的作用:在反射中获取注解,以取得注解修饰的类.方法或属性的相关解释. package me.lichunlong.spring.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.R

Java自定义注解反射校验数据

package com.annotations.ecargo; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUN

gradle编译自定义注解(annotation)

最近把一个用eclipse构建的项目,加上了Gradle脚本,用它来编译.虽然最后编译是显示BUILD SUCCESSFUL,但是在编译过程中,却打印出一大堆栈信息,似乎是在编译我自定义的注解时出现的异常. 打印的栈信息前面部分如下: :assemble :lint Failed converting ECJ parse tree to Lombok for file E:\code\git\androidkit\andro idkit\src\com\lurencun\cfuture09\an

Java:注解Annotation(元数据)

本文内容: 注解Annotation的介绍 基本注解的用法 首发日期:2018-07-28 注解Annotation的介绍 Annotation是代码中的特殊标记,能够在编译.类加载.运行时被识别(需要设置),并根据不同的Annotation来执行不同的处理. Annotation可以修饰包.类.构造器.函数.成员变量.局部变量的声明.参数等程序元素.Annotation帮助这些元素来设置元数据,程序从元数据中获取信息来处理这些元素. 元数据可以描述代码间关系或者代码与其它资源的关系,比如说在w

Java自定义注解

自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承Java.lang.Annotation这一接口,并且不能再去继承别的类或是接口. 2. 参数成员只能用public或默认(default)这两个访问权修饰 3. 参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String.Enum.Class.annotations等数据类型,以及这一些类