您的位置:首页 > 编程语言 > Java开发

java注解

2016-07-23 23:17 295 查看
注解: 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());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: