Java注解
一、什么是java注解
注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的。
Java注解又叫java标注,java提供了一套机制,使得我们可以对方法、类、参数、包、域以及变量等添加标准(即附上某些信息)。且在以后某个时段通过反射将标注的信息提取出来以供使用。
二、自定义Java标注
1 为什么要自定义注解
Java从1.5版本以后默认内置三个标注:
? @Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
? @Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
? @SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.
但是,仅仅这三个标注是不能满足我们开发时一些需求的。所以java允许我们自定义注解来使用。
2 如何自定义注解
自定义步骤大致分为两步:
1, 通过@interface关键字(注意,不是interface,是@interace)声明注解名称,以及注解的成员属性或者叫做注解的参数。
2, 使用java内置的四个元注解对这个自定义标注的功能和范围进行一些限制
问题来了,什么是元注解?
3 什么是元注解
元注解,就是定义注解的注解,也就是说这些元注解是的作用就是专门用来约束其它注解的注解。请区别上面那三个注解,他们也是通过元注解定义而来的。
元注解有哪些呢,主要有四个@Target,@Retention,@Documented,@Inherited?
1. * 元注解有:@Target,@Retention,@Documented,@Inherited
2. *
3. * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
4. * ElemenetType.CONSTRUCTOR 构造器声明
5. * ElemenetType.FIELD 域声明(包括 enum 实例)
6. * ElemenetType.LOCAL_VARIABLE 局部变量声明
7. * ElemenetType.METHOD 方法声明
8. * ElemenetType.PACKAGE 包声明
9. * ElemenetType.PARAMETER 参数声明
10. * ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
11. *
12. * @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
13. * RetentionPolicy.SOURCE 注解将被编译器丢弃
14. * RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
15. * RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
16. *
17. * @Documented 将此注解包含在 javadoc 中
18. *
19. * @Inherited 允许子类继承父类中的注解
注意事项:
所有的Annotation会自动继承java.lang.annotation这一个接口,所以不能再去继承别的类或是接口.
最重要的一点,Annotation类型里面的参数该怎么设定:
第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型.
第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String.
将常见可重用的行为以定制注解的方式添加到Java应用中是一种非常棒的方式,但如果开发者在决定使用注解的时候能够遵循一些开发标准和最佳实践的话,那就更事半功倍了。比如说在计划使用注释之前,比较一下当前情况下是不是注释真的比内迁代码和接口更为贴切。
处理注解三种方式:
生成器:这种注解处理方式是通过读取源代码来产生新的源代码,或修改现存源代码及其它一些文件(XML、文档等等)来实现。生成器主要依赖于容器或其它编码约定,可以在任何保持策略下工作。使用生成器的例子有注解处理工具(Annotation Processing Tool,即APT)和处理器、XDoclet、Spoon(针对Java的扩展编译器)、APT-Jelly(一个模板库)等。APT不允许你修改源代码,但对产生辅助文件却有相当大的帮助(像WSDL、文档)。
字节码转换:注解处理器对带有注解的类文件进行解析,然后对类做一些设当的修改。此外,他们也能生成其他类型的文件(比如XML配置文件)。字节码转换器在离线状态(编译期)、在装载期都能运行,还能在运行时动态运行(使用JVMTI API)。在class或runtime这样的保持策略下,它都能运行。
使用字节码转换器的例子有AspectJ、Spring、Hibernate、CGLib、Javassist、ASM、BCEL等。
运行时反射:这种方式使用反射API以编程的方式在运行阶段检查对象。它主要依赖于容器或其他编码约定,同时也需要runtime保持策略。
使用运行时反射的例子有:Java 5及更新Java版本中的反射、Commons Attributes。像JUnit和TestNG这样的测试框架也使用运行时反射来处理注解。
如果Java代码可以以接口的方式实现,那就用接口,不要去用注解。他还建议大家不要对所有东西都使用注解,因为POJO(Plain Old Java Object)要比HAJO(Heavily Annotated Java Object)好
最佳实践准则:
注解要添加在最高层次的抽象上(比如在类和方法这两个层次上,注解要尽量添加在类上面)
- 在面对规则的时候,尽量使用合适的默认值,而且只对exception添加注解。比外,还要尽量少用参数。
- 将注解作为“规约优于配置”法则的补充(如Spring)
- 使用反射来增强现有框架(如测试)
- 利用Javassist和CGLIB框架来产生新的对象,对于底层来说,可以提高字节码转换效率
- 使用APT来生成非代码文件
相关推荐
java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解...
java注解和反射的个人学习笔记
JAVA注释模板以及详细设置解释等等。 注释模板 如何设置
Java注解实现
超级好用的 java 注释模板,吐血总结,整理。吐血总结,整理。
主要包括:普通java注解,hibernate注解,spring注解,struts2注解,对于学习注解的朋友有很大的帮助!
简述java注解功能及用法,有代码示例。看起来还成,比较简单,学spring注入的时候要用到注解注入的话,本书属于必看版。
java注释全解,内容全面,包括hibernate注解、Java注解、Spring注解、SSH全注解等内容,分为4个文档介绍。另附一些精品java学习资料,欢迎大家下载学习。
入门级java 注解学习示例代码
java注解解析知识要点 精简易懂
Java注解、反射、动态代理demo
Java 注解(Annotation) - 请认准 ih0qtq
java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的通用工具类,代码简洁优雅 。基于注解实现的支持中文表头的读取Excel数据并转换为实体对象列表的工具类,使用该工具类可将Excel...
Java注解的使用例子,使用Ant编译,执行run.bat运行.
eclipse中java类注释模板,有需要的朋友可以参考使用。
这是自己总结的java注解 使用了思维导图,方便读取,快速阅读
java注解详解[文].pdf
java 注释模板 java 注释模板 java 注释模板 java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板
自己做得java项目注释统计工具,可统计代码行数,注释行数,能统计各种注释样式,能看统计详细情况,能生成报表,可自由控制合格率!算法高效!
java 注解 反射 字节码 类加载 包括pdf资料以及全部源码文件,具有非常大参考价值和学习意义