java注解编程_Java注解编程原理

一、先了解以下4个元注解

@Documented

具体来说是生成说明文档时把类的解释添加进去。

@Inherited 允许子类继承父类中的注解

@Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中

public enum ElementType {

TYPE,  //给类(型)注解

FIELD, //给字段注解,不要忘了,字段可以是对象

METHOD, //给方法注解

PARAMETER, //给参数注解

CONSTRUCTOR, //给构造方法注解

LOCAL_VARIABLE, //给局部变量注解

ANNOTATION_TYPE,//给注解注解(这貌似把自己不当类来看)

PACKAGE, //给包注解

TYPE_PARAMETER, //不知道,等知道了我再写在这里

TYPE_USE //这个也不知道

}

@Retention  表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中

public enum RetentionPolicy {

SOURCE, //源码状态运行,

CLASS, //编译类文件时运行

RUNTIME //运行时运行

}

二、再看一个Demo

注解定义

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(value = { ElementType.FIELD })

@Retention(RetentionPolicy.RUNTIME)

public @interface UserAnnotation {

public int id() default 0;

public String name() default "";

public int age() default 18;

public String gender() default "M";

}

public class User {

int id;

String name;

int age;

String gender;

public User(int id, String name, int age, String gender) {

this.id = id;

this.name = name;

this.age = age;

this.gender = gender;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

}

import java.lang.annotation.ElementType;

import java.lang.annotation.Target;

import java.lang.reflect.Field;

public class TestMain {

@UserAnnotation(age = 20, gender = "F", id = 2014, name = "zhangsan")//注解的使用

public Object obj;

public static void main(String[] args) throws Exception {

Field objField = TestMain.class.getField("obj");

UserAnnotation ua = objField.getAnnotation(UserAnnotation.class);//得到注解,起到了标记的作用

System.out.println(ua.age() + "," + ua.gender() + "," + ua.id() + "," + ua.name());

//***进一步操作的话,假设Object要指向一个User类,那么可以讲注解的值给他

TestMain tm = new TestMain();

objField.set(tm, new User(ua.age(), ua.gender(), ua.id(), ua.name())); //不错吧,将自己的信息送给obj,起到了附加信息的作用

//-----------请自由遐想吧~~,下面来说说注解怎么能获得注解自己的注解-------------

Target t = ua.annotationType().getAnnotation(Target.class);

ElementType[] values = t.value();

//~~~~~~~~~~~~~~完了,再一次自由遐想吧~~~~~~~~~~~~~~

String words="疯狂";

System.out.println(words);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值