来!认识一下强大的Annotation

转自:http://snkcxy.iteye.com/blog/1820951

 

1.annotation是什么?

  1. 注释:存在与否都不会影响程序的运行,当然这个是指不涉及APT(Annotation Processing Tool)的情况下
  2. 标记:可以标记类、方法、成员变量(java 8开始可以标记类型)
  3. 补充信息:可以具体描述被标记内容的相关信息,提供验证、部署、额外的功能。
  4. 一个简单又复杂的强大技术。

2.我们身边的Annotation

  1. @Override:可以认为是一种验证,验证所标记的方法是否是父类的需要重写的方法,主要防止低级错误(例如拼写错误),它告诉编译器来验证这个方法,保证你所重写的方法是父类存在的方法。(有些人认为这是一种限定或者是控制)
  2. @Deprecated:标记这个方法已经过时。 例如:我们自己定义一个过时的方法,或者创建一个Date对象 然后调用getYear()方法
  3. Spring、Hibernate、各种MVC框架,现在都基本提供Annotation的编程方式。
    优点:简单(降低配置难度),提高开发效率(不用来回切换于代码与配置文件之间)
    缺点:在没有源码的情况下 今后维护起来比较费劲,修改代码之后大部分情况下不得不重启服务。

       
 

3.写一个简单的annotation 感官认识一下,详细介绍请关注我博客的后期文章

  1. 我们自己定义了一个CxyAnnotation
  2. 我们创建了一个成员变量name,然后标记上CxyAnnotation
  3. 我们使用反射将其信息取出来。(当然实际使用的时候会使用APT去处理,这里只做一个简单的例子)

4.因为Annotation的使用和反射息息相关,所以本例只是简单的介绍了一下annotation,如果本文受大家欢迎的话,会尽快出更详细的文章。

 

 

Java代码 复制代码  收藏代码
  1. package com.cxy.annotation;   
  2.   
  3. import java.lang.annotation.Annotation;   
  4. import java.lang.annotation.ElementType;   
  5. import java.lang.annotation.Retention;   
  6. import java.lang.annotation.RetentionPolicy;   
  7. import java.lang.annotation.Target;   
  8. import java.util.Date;   
  9.   
  10. /**  
  11.  * @author cxy  
  12.  */  
  13. public class AnnotationTest   
  14. {   
  15.     @CxyAnnotation(title="名字",descript="记录用户姓名")   
  16.     public String name="";   
  17.        
  18.     public static void main(String[] args) throws Exception   
  19.     {   
  20.         Date d=new Date();   
  21.         d.getYear(); //这个Date方法被划伤了横线 代买这个方法已经过时   
  22.         oldMethod(); //这个自定义的方法 被打上了过时方法的标记 @Deprecated   
  23.         System.out.println("====================");   
  24.            
  25.         Annotation[] aArray=AnnotationTest.class.getField("name").getAnnotations();   
  26.         //为了演示方便这里我知道肯定会有一个CxyAnnotation在数组的第一个 所以直接取,实际工作中请使用遍历去判断   
  27.         Annotation na=aArray[0];     
  28.         System.out.println("成员变量name的扩展信息:");   
  29.         System.out.println("name代表:"+((CxyAnnotation)na).title());   
  30.         System.out.println("name具体描述:"+((CxyAnnotation)na).descript());   
  31.     }   
  32.        
  33.     //检查父类是否有一个这样的方法让子类重写。   
  34.     @Override  
  35.     public String toString()   
  36.     {   
  37.         return "AnnotationTest [getClass()=" + getClass() + ", hashCode()="  
  38.                 + hashCode() + ", toString()=" + super.toString() + "]";   
  39.     }   
  40.   
  41.     //标记这个方法已经过时   
  42.     @Deprecated  
  43.     public static void oldMethod()   
  44.     {   
  45.         System.out.println("这个方法已经过时了");   
  46.     }   
  47. }   
  48.   
  49. //自己定义的一个Annotation   
  50. @Retention(RetentionPolicy.RUNTIME) //保留注释到程序运行   
  51. @Target(ElementType.FIELD) //这个annotation是标记在field上的   
  52. @interface CxyAnnotation   
  53. {   
  54.     String title();   
  55.     String descript();   
  56. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值