`
haoran_10
  • 浏览: 436552 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java注解

    博客分类:
  • java
阅读更多

 

注解,是未来技术的先驱者,会带来一股风暴的,很多框架已经运用了注解,反射,其中不乏hibernate,spring这样的赫赫有名的框架,该知识的精华在于可以很干练的表示某个类的所属的信息,从而利用反射,可以达到事半功倍的效果

 

这里以常用的生活例子,写注解的运用。

解释:有一个学生的注解,该注解包含学生的一些信息,其他类加载该注解时,可以设置响应的属性信息,从而判断其他类的信息,这就等于给该类加上了一种学生标签,类其实也是具体的···准确理解这句话,那么注解,就很好理解了

 

 

 

首先是一个学生类的注解:

 

package com.study.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//元注解
@Retention(RetentionPolicy.RUNTIME)//注解的生命周期
@Target({ElementType.TYPE,ElementType.METHOD})//注解的运用场合(接口,类,枚举,方法,字段等等)
public @interface StuAnnotation {
	String value() default "test";//可以设置默认值,当只有一个value方法时,在运用此注解时,只需要填写值
	String id() default "000";//默认值
	int age();//年龄
	String[] hobbys();//学生爱好,数组爱好
	ClassList whichClass();//所属班级,枚举类型
	SchoolAnnotation school();//所属学校,注解类型
	Class<?> isStu();//是否是学生,class类型
}
 

 

其次是该类所包含的班级枚举,学校类的注解,

 

package com.study.annotation;

//班级枚举,三个班级
public enum ClassList {
	jk1,
	jk2,
	jk3
}

 

 

学校类的注解:

 

package com.study.annotation;

public @interface SchoolAnnotation {
	String schoolName() ;
}
 

 

 

然后一个类,加载该注解,不妨命名为Student类

 

 

package com.study.annotation;

//设置学生信息,即加载注解信息
@StuAnnotation(age = 22, hobbys = { "football", "music", "acm" }, whichClass = ClassList.jk3, school = @SchoolAnnotation(schoolName = "xxx大学"), isStu = Student.class)
public class Student {
	public void doSth(){
		System.out.println("i am a student");
	}
}
 

 

最后是一个测试类

 

 

package com.study.annotation;

public class MainTest {
	public static void main(String[] args) {
		if (Student.class.isAnnotationPresent(StuAnnotation.class)) {// 判断是否有StuAnnotation的注解
			StuAnnotation stuAnnotation = Student.class.getAnnotation(StuAnnotation.class);// 如果有注解,返回注解的属性
			// 返回各个属性信息
			String value = stuAnnotation.value();
			String id = stuAnnotation.id();
			int age = stuAnnotation.age();
			String[] hobbys = stuAnnotation.hobbys();
			ClassList whichClass = stuAnnotation.whichClass();
			SchoolAnnotation schoolAnnotation = stuAnnotation.school();
			String schoolName = schoolAnnotation.schoolName();// 注解信息,向上再寻一层
			Class<?> clazz = stuAnnotation.isStu();
			// 输出信息F
			System.out.println("-----该类信息如下-----");
			System.out.println("value:" + value);
			System.out.println("id:"+id);
			System.out.println("age:"+age);
			System.out.print("hobby:[");
			for(String hobby:hobbys){
				System.out.print(hobby+"\t");
			}
			System.out.println("]");
			System.out.println("whichClass:"+whichClass);
			System.out.println("schoolName:"+schoolName);
			if(clazz.equals(Student.class)){
				System.out.println("是否是学生:"+"是");
			}else{
				System.out.println("是否是学生:"+"否");
			}
		}
	}
}
 
2
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics