本练习有三个目标:
1.如何定义注释类型
2.如何使用注释类型
3.如何让注释影响程序运行
一.如何定义注释类型
package org.test.spring.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* <p>
* 定义一个Person类专用的注释
* </p>
* 元注释Retention用于指定此注释类型的注释要保留多久, 元注释Target用于指定此注释类型的注释适用的程序元素的种类,
*
* @author Huy Vanpon
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Annot4Person
{
String name() default "惠万鹏";
int age() default 25;
String gender() default "男";
}
二.2.如何使用注释类型
package org.test.spring.annotation;
/**
* <p>
* 本类用于定义人类,包含一个自我介绍的方法
* </p>
*
* @author Huy Vanpon
*/
public class Person
{
@Annot4Person(name = "何洁", gender = "女", age = 16)
public void introductionMyself(String name, String gender, int age)
{
StringBuffer sb = new StringBuffer();
sb.append("嗨,大家好,我叫");
sb.append(name);
sb.append(",今年");
sb.append(age);
sb.append("岁,是一个充满阳光的");
sb.append(gender);
sb.append("孩.");
System.out.println(sb.toString());
}
}
三.如何让注释影响程序运行
package org.test.spring.annotation;
import java.lang.reflect.Method;
/**
* <p>
* 本用利JAVA的反射机制,让注释影响程序的运行
* </p>
*
* @author Huy Vanpon
*/
public class AnnotDisturber
{
public void testAnnot4Person()
{
Class<Person> clazz = Person.class;
try
{
//通过方法名和入参确定方法
Method method = clazz.getDeclaredMethod("introductionMyself",
String.class, String.class, int.class);
if (method == null)
{
return;
}
//从方法取得注释
Annot4Person annotation = method.getAnnotation(Annot4Person.class);
if (annotation == null)
{
return;
}
//调用这个方法
method.invoke(new Person(), annotation.name(), annotation.gender(),
annotation.age());
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
AnnotDisturber tt = new AnnotDisturber();
tt.testAnnot4Person();
}
}