java注解
2016-07-23 23:17
295 查看
注解: Annotation
作用:主要是用来替代xml的配置文件。
存在的位置:在对应的Java类中
使用的范围:用于修饰包,类,构造器,方法,成员变量,参数和局部变量的声明。
存储形式:key\value形式.
注意:不影响原本的代码执行.
* 注解与XML的区别:
* 注解:
* 优点:
* 直观,简单.
* 配置方式容易.
* 缺点:
* 配置信息相对过于零散.
* 修改过于麻烦(重新编译)
* XML:
* 优点:
* 与Java类逻辑的关系低耦合.
* 复用性.
* 修改很简单(不用编译)
* 缺点:
* 编写过于复杂.
* 解析操作过于复杂.
* Java中提供三个基本注解:
* @Override:限定重写父类方法
* 用处:当一个类继承于另一个类,并重写其提供的方法时.
* @Deprecated:标示已过时
* 作用:保证软件或系统版本更新,对版本的兼容性(新版本只能增加内容,不能修改及删除).
* @SuppressWarnings:抑制编译器警告
* 范围:作用在类、方法、成员变量等.
自定义注解:
使用关键字 @interface.
定义属性:
语法:类型 属性名称();
使用属性时:
@注解名称(属性名=属性值,属性名=属性值,…)
一旦自定义注解时,定义属性:一定是必要属性.
支持的类型:基本类型、String、Enum、Class及上述类型的一维数组类型.
注意:
如果自定义注解,只定义value属性(没有任何其他属性)
String value();
使用该注解时,可以省略”value=”(可以直接指定属性值,而不定义属性名)
@MyAnno(“”)
@Target注解:
作用:
用于修饰自定义注解.
用于指定该自定义注解允许修饰Java类的哪个部分(类、成员变量、方法等).
该注解包含ElementType类型的value属性.
@Retention注解:
作用:
用于修饰自定义注解.
指定该自定义注解的生命周期.(生命周期 - SOURCE、CLASS、RUNTIME)
通过反射读取注解:
前提:自定义注解只能是RUNTIME.
使用Annotation修饰了类、方法、成员变量等之后,这些Annotation不会自己生效,必须通过相应程序提取并处理Annotation信息。Java提供的Annotation接口是所有注解的父接口,在JDK 5.0新增加AnnotatedElement接口,该接口提供读取运行时Annotation的方法。只有当自定义的Annotation使用了@Retention(RetentionPolicy.RUNTIME)时,该Annotation才会在运行可见,JVM才能读取保存在class文件的Annotation信息。
作用:主要是用来替代xml的配置文件。
存在的位置:在对应的Java类中
使用的范围:用于修饰包,类,构造器,方法,成员变量,参数和局部变量的声明。
存储形式:key\value形式.
注意:不影响原本的代码执行.
* 注解与XML的区别:
* 注解:
* 优点:
* 直观,简单.
* 配置方式容易.
* 缺点:
* 配置信息相对过于零散.
* 修改过于麻烦(重新编译)
* XML:
* 优点:
* 与Java类逻辑的关系低耦合.
* 复用性.
* 修改很简单(不用编译)
* 缺点:
* 编写过于复杂.
* 解析操作过于复杂.
* Java中提供三个基本注解:
* @Override:限定重写父类方法
* 用处:当一个类继承于另一个类,并重写其提供的方法时.
* @Deprecated:标示已过时
* 作用:保证软件或系统版本更新,对版本的兼容性(新版本只能增加内容,不能修改及删除).
* @SuppressWarnings:抑制编译器警告
* 范围:作用在类、方法、成员变量等.
public class Person { public void fun1() { } } public class FanBingBing extends Person{ @myanno(addr="beijing",jbo="jiaozhu",name="zhangwuji") private int b=0; @myanno(addr="beijing",jbo="jiaozhu",name="zhangwuji") public void fun1() { // TODO Auto-generated method stub super.fun1(); } @myanno(addr="YUIKal小区",job="zhangmen",name="zhaomin") public void fun2() { } } import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.METHOD,ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface myanno { String name(); String jbo(); String addr(); }
自定义注解:
使用关键字 @interface.
定义属性:
语法:类型 属性名称();
使用属性时:
@注解名称(属性名=属性值,属性名=属性值,…)
一旦自定义注解时,定义属性:一定是必要属性.
支持的类型:基本类型、String、Enum、Class及上述类型的一维数组类型.
注意:
如果自定义注解,只定义value属性(没有任何其他属性)
String value();
使用该注解时,可以省略”value=”(可以直接指定属性值,而不定义属性名)
@MyAnno(“”)
@Target注解:
作用:
用于修饰自定义注解.
用于指定该自定义注解允许修饰Java类的哪个部分(类、成员变量、方法等).
该注解包含ElementType类型的value属性.
@Retention注解:
作用:
用于修饰自定义注解.
指定该自定义注解的生命周期.(生命周期 - SOURCE、CLASS、RUNTIME)
通过反射读取注解:
前提:自定义注解只能是RUNTIME.
使用Annotation修饰了类、方法、成员变量等之后,这些Annotation不会自己生效,必须通过相应程序提取并处理Annotation信息。Java提供的Annotation接口是所有注解的父接口,在JDK 5.0新增加AnnotatedElement接口,该接口提供读取运行时Annotation的方法。只有当自定义的Annotation使用了@Retention(RetentionPolicy.RUNTIME)时,该Annotation才会在运行可见,JVM才能读取保存在class文件的Annotation信息。
import java.lang.reflect.Method; //反射读取Annotation public class AnnotatedElementTest { public static void main(String[] args) throws Exception { // 获取对应类的Class对象. Class clazz= FanBingBing.class; // 获取对应类方法的Method对象. Method method= clazz.getMethod("fun2" ); // 获取类上的注解. myanno anno = method.getAnnotation(myanno.class); //测试 System.out.println(anno.name()); } }
相关文章推荐
- 【Java源码分析】集合框架-Collections工具类-Arrays工具类
- 用记事本打开TXT文本文件
- Java 的 定义
- Java三大框架之struts的上传文件出错信息配置(允许上传的类型,上传文件的大小,以及大文件上传说明等等)
- 【Java源码分析】LinkedHashMap源码分析
- java学习笔记之 static
- java的包导入机制总结与剖析
- Java 内置的进制转换
- PAT 乙级1005.继续(3n+1)猜想(JAVA版)
- Java 集合框架(一)_day15
- Java nio系列之一
- SpringBoot开发实践-起步
- 使用Spring的Log4jConfigListener动态加载log4j
- SpringMVC 常用注解整理
- 学生自动排队实例(comparactor比较器)
- Java之详解坦克大战游戏(四)
- 从零开始学java(小游戏 石头剪刀布)
- 从零开始学java(猜数字游戏)
- java枚举类型enum的使用介绍
- JAVA 面向对象之深入构造器