Java注解
来源:互联网 发布:js收藏地址 编辑:程序博客网 时间:2024/06/06 23:52
在新生项目中,使用了注解,但是对于注解的形成、作用等一系列知识还不是很懂,找了视频和博客总结了一下,给大家分享。
1、我们为什么要使用注解?
使用Annotation之前,XML被广泛的应用于描述元数据。后来一些应用开发人员和架构师发现XML的维护越来越糟糕了。他们希望使用一些和代码紧耦合的东西,而不是像XML那样和代码是松耦合的(在某些情况下甚至是完全分离的)代码描述。
假如你想为应用设置很多的常量或参数,这种情况下,XML是一个很好的选择,因为它不会同特定的代码相连。如果你想把某个方法声明为服务,那么使用Annotation会更好一些,因为这种情况下需要注解和方法紧密耦合起来,开发人员也必须认识到这点。
另一个很重要的因素是Annotation定义了一种标准的描述元数据的方式。在这之前,开发人员通常使用他们自己的方式定义元数据。例如,使用标记interfaces,注释,transient关键字等等。每个程序员按照自己的方式定义元数据,而不像Annotation这种标准的方式。
目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间的利弊。
2、注解的简介及使用方式
从JDK5.0开始,Java增加了对元数据(MetaData)的支持,元数据是描述数据的数据,Annotation注解就可以看做为元数据。
注解其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。他依靠反射机制来实现。通过使用注解,我们可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
注解可以向修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在注解的"name = value"对中,其实也就是K-V键值对。下面会有一些小例子供大家参考。
注解能被用来为程序元素(类,方法,成员变量等)设置元数据。
使用注解时只需要在其前面加一个@符号就可以了,把它当成一个修饰符来使用,修饰它所支持的程序元素。
在Java中,有三个基本的注解:
(1)、@Override:限定重写父类方法,该注释只能用于方法
(2)、@Deprecated:用于表示某个程序元素(类,方法等)已过时
(3)、@SuppressWarnings:抑制编译器警告。
例子:Target的Java注解
@Documented@Retention(RetentionPolicy.RUNTIME)@(ElementType.ANNOTATION_TYPE)public @interface Target(){ ElementType[] value();}
3、自定义注解
自定义新的注解也要使用@interface关键字,其成员变量在注解定义中一无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。
可以在定义注解的成员变量是为其制定初始值,制定成员变量的初始值可使用default关键字。
对于没有成员定义的注解称为标记;包含成员变量的注解称为元数据注解。
/* Demo: * 1.使用@interface定义注解 * 2.使用类似于接口方法声明的方式来定义注解的属性:其中返回值称为属性的类型,方法名为属性名称。 *///定义注解public @interface HelloAnnotation{ public String name();}//定义带有初值abc的注解public @interface HelloAnnotationWithValue{ public String name() default "abc";}//其他类中使用注解class A{ @HelloAnnotation(name="abc") void methodA(){}}
4、元注解
JDK含有元注解,他们用于修饰其他注解定义。
简单介绍几个:
(1)@Retention:只能用于修饰一个注解定义,用于指定该注解可以保留多长时间。@Retention包含一个RetentionPolicy的成员变量,使用时必须为该value成员变量赋值。
RetentionPolicy.CLASS,编译器将把注释记录在class文件中,当运行Java程序时,JVM不会保留注解,这是默认值;
RetentionPolicy.RUNTIME(上面@Target中用到了),编译器也会把注解记录在class文件中,当运行Java程序时,JVM保留注解,程序可以通过反射获取该注解。
RetentionPolicy.SOURCE:编译器直接丢弃这种策略的注解。
(2)@Target:用于修饰注解定义,指定被修饰的注解能用于修饰那些程序元素。@Target也包含一个名为value的成员变量。
如:@Target(value={ElementType.METHOD})
(3)@Documented:用于指定被该元注解修饰的注解类将被javadoc工具提取成文档。
(4)@Inherited:被他修饰的注解将具有继承性,如果某各类使用了此类注解修饰的注解,则其子类将自动拥有该注解。
小结:注解的一些理论和使用方面的知识介绍的差不多了,只是关于它具体怎么用的反射笔者还没完全明白,在接下来的学习中,会继续学习并和大家探讨。
- Java注解-自定义注解
- Java注解----自定义注解
- Java注解自定义注解
- Java注解--四种元注解
- Java注解-三种內建注解
- 【Java】【注解】自定义注解
- java注解
- java注解
- java注解
- java 注解
- Java注解
- java 注解
- Java 注解
- Java注解
- java 注解
- JAVA注解
- Java注解
- Java注解
- 英语学习录——十月
- 设置maven的编译级别
- hdu 2121
- 权限框架——CAS之工作原理
- cortex-M3 异常和中断
- Java注解
- 杭电acm1555
- 杭电5500排书
- css3中transform和transition的用法
- The application you have selected does not exist,Xcode 提交失败
- 1072: [SCOI2007]排列perm
- 重磅教程!帮你全面彻底搞定MATERIAL DESIGN的学习笔记
- ps实用技巧上
- 使用VS搭建三层结构