java自定义注解

Java注解


一、简介:

Java注解是附加在代码中的一些元信息。


二、元注解:

元注解是指注解的注解在定义注解的时候需要用到。包括  @Retention @Target @Document @Inherited四种。

SOURCE:    不包括在class文件中的注解

CLASS:       包括在class文件中的注解 

RUNTIME:   包括在class文件中的注解,并由虚拟机载入,可在运行时通过反射获取。(常用) 

  1. @Retention:用于指定一条注解应该保留多长时间(默认值RetentionPolicy.CLASS)
  2. @Target:用于指定该注解可用于哪些元素上(如:类,方法,字段,构造器等)    
  3. @Document :为像Javadoc这样的归档工具提供提示。
  4. @Inherited:只能用于对类的注解,表示该注解为继承注解。如果一个类具有继承注解那么它的所有子类都自动具有同样注解。

三、注解处理:

  • 1.源码级注解处理(SOURCE):

 可以将自定义注解处理器添加到java编译器中。命令javac -processor ProcessorClassName1,ProcessorClassName2 sourceFiles。编译器会定位源码中的注解,然后选择可用的注解处理器,每个注解处理器会依次执行。如果某个注解处理器创建了一个新的源文件,那么将重复执行这个处理过程处理新建的源文件。

自定义注解处理器需要扩展AbstractProcessor类。用 SupportedAnnotationTypes 描述处理器关注哪些注解。如:

@SupportedAnnotationTypes("xxxxx")
public class TestProcessor extends AbstractProcessor {
    @Override
    public boolean process(
            Set<? extends TypeElement> annotations, RoundEnvironment roundEnv
    ) {
        return false;
    }
}

可参考:(懒得自己写,随便找了两个示例)

https://www.jianshu.com/p/6db8ad1b89c6   

http://blog.csdn.net/duo2005duo/article/details/50541281

http://www.importnew.com/15246.html

  • 2.字节码级别注解处理(CLASS):

编写一个工具类,去都去class文件然后修改class文件。需要用到字节码工程相关工具。

可参考:(懒得自己写,随便找了两个示例)

http://blog.csdn.net/PacosonSWJTU/article/details/50722281

在加载时修改字节码:

1)自定义类加载器:

2)利用javaagent然后在instrumentation.addTransformer(new xxxxx(){具体修改字节码的逻辑})

可参考:(懒得自己写,随便找了两个示例)

http://blog.csdn.net/yczz/article/details/51656386

运行参数:java -javaagent:xxx.jar=xfds -classpath kkkk

 

 

  • 3运行期的注解处理(RUNTIME):

        1)用spring aop代理,如:  

execution(com.nw.base.base.Rest com.nw.base.controller.api.*.*(..)) and @annotation(apiLimit)

public Object exeApiLimit(ProceedingJoinPoint pjp, ApiLimit apiLimit){

    // operation

}

2)用反射直接处理,如:

Field f = xxxxxxxx;
Resource resource = f.getAnnotation(Resource.class);
System.out.println(resource.name());

可参考:(懒得自己写,随便找了两个示例)

http://blog.csdn.net/doc_sgl/article/details/50367083

参考自:

JAVA核心技术II

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值