注解

注解:将来的发展趋势

从JDK5.0开始, Java增加了对元数据(MetaData)的支持,
也就是 Annotation(注解)。?
Annotation其实就是代码里的特殊标记,
它用于替代配置文件,也就是说,
传统方式通过配置文件告诉类如何运行,
有了注解技术后,开发人员可以通过注解告诉类如何运行。
在Java技术里注解的典型应用是:可以通过反射技术去得到
类里面的注解,以决定怎么去运行类。?

使用注解的步骤

  1. 何定义注解。
  2. 把注解应用到对应的目标上
  3. 通过反射的api,反射注解,并根据反射的注解信息,
    决定如何去运行类

如何定义注解

  @Target({ElementType.TYPE,ElementType.METHOD})
  @Retention(RetentionPolicy.RUNTIME)
  public @interface MyAnnotation{
    //不是接口方法,是注解的属性
	public  String value();
	public  String name()  defalut "abc";
	public String[] colors() default {};
  }
  
  元注解:用于修饰注解的注解。
	@Target(ElementType.XXX)//应用的目标
	@Retention(RetentionPolicy.SOURCE)//注解的保留策略
	@Documented//生成注解的文档
  
  元注解详解:
    @Target(ElementType.METHOD):被修饰的注解能够在什么地方使用
	  (注解、类/接口、字段、方法、构造方法、参数上..)上面使用。
		ElementType:
			ANNOTATION_TYPE 注解类型声明 
			CONSTRUCTOR 构造方法声明 
			FIELD字段声明(包括枚举常量) 
			LOCAL_VARIABLE局部变量声明 
			METHOD 方法声明 
			PACKAGE 包声明 
			PARAMETER 参数声明 
			TYPE 类、接口(包括注释类型)或枚举声明 
			
	@Retention(RetentionPolicy.RUNTIME)
		被它修饰的注解保留域。   
		    编译器   类加载器  JVM
		        .java-> .class->加载->运行
        SOURCE:源码级别,给编译器看的,
			编译完之后直接丢弃该种策略的注解。
			生成的.class字节码文件中没有该类型的注解
        CLASS:	给类加载器看的,
				在类加载时可以做一系列引导操作。
				编译器编译后存在,类加载器加载完之后,
				丢弃该保留域的注解。
        RUNTIME:给JVM看的,在程序运行的过程中做相关的
			     操作。编译器编译后保留,
				 类加载器加载后保留,
				 在JVM运行时通过反射技术反射使用的是
				 什么注解,注解属性的值是什么,
				 根据他们两个的值做对应的操作。
        @Documented:自定义的注解如果使用Documented注解,
		             生成的doc文档上,使用该自定义注解的
					 地方会显示注解信息;
					 如果去掉@Documented,
					 生成的doc文档上将不再有注解信息。
注解中的属性详解
	a.注解定义属性和接口中定义方法类似,缺省默认是public。
		 public 类型 属性名称();
	b.定义属性时,如果没有使用default指定默认值,
	  使用当前注解必须为该属性赋值
	 (可以利用该特点,设置必须赋值的属性不要
	  使用default指定默认值)。
	  使用default指定默认之后,该属性在注解使用时可以赋值,
	  也可以不赋值。
	c.注解中的属性类型是有要求的,
	  可以是八种基本数据类型,可以是枚举类型、
	  Class类型、String等,以及以上类型的“一维”数组
	  比如:String[] likes() default {};
	  在注解使用时,如果数组类型的属性的值是一个值得话,
	  赋值时可以把“{}”省略掉。@Anno1(name="zs",likes="fb")
	d.存在一个特殊的属性:value,
	  如果只为该属性赋值,value=可以省略;
	  但是如果为注解中多个属性同时赋值的话,
	  value=是不可以省		 

把注解应用到对应的目标上

在对应的目标写
@注解的名称(属性名=属性值)
@注解的名称(属性名1=属性值1,属性名2=属性值2,…属性名n=属性值n)

反射注解

参见项目代码

总结:用注解就是根据注解和注解上的属性值,来决定是否做一些事可以是执行指定的功能,也可以是调用一个具体的方法

步骤

  1. 自定义注解
  2. 注解放在指定位置
  3. 写反射代码解析注解
  4. 根据注解和注解的属性做功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值