解析自定义注解

*如何解析一个自定义注解?
 * 1)在那个类中使用的这个注解,获取该类的字节码文件对象
 * 2)通过该类的字节码文件对象加载这个注解
 *         Class类中:字节码文件对象
 * public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
 * 获取到了注解对象---->相当于获取到了接口的子实现
 * 3)调用该返回的注解(接口)的子实现类对象的属性
 * 4)创建Properties属性集合类
 * 5)通过反射获取

public class Teacher {
	public void love() {
		System.out.println("爱java,爱生活");
	}
}
@MyPro(className = "com.lin.annotation_04.Teacher", 
methodName = "love")
public class Test {
	public static void main(String[] args) throws Exception {
//		获取该类Test字节码文件对象
		Class<Test> clazz=Test.class;
//		通过该类的字节码文件对象加载这个注解
		MyPro  myP=clazz.getAnnotation(MyPro.class);
		/*
		 * 相当于:public interface MyPro{
		 * 		String className() 
		 * 		String methodName() 
		 * }
		 * class MyPropertiesImpl implemnts M
		 * yProp{
		 * 		重写该抽象方法--->
		 * }
		 * */
		String className=myP.className();//com.lin.annotation_04.Teacher
		String methodName=myP.methodName();//love方法名
		
//		创建属性集合类对象
		Class<?>c=Class.forName(className);
//		直接通过字节码码文件对象获取该类实例
		Object obj=c.newInstance();
//		获取Method对象
		Method m=c.getMethod(methodName);
//		调用
		m.invoke(obj);
		
	}
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)//将@MyPro标记在类上使用
@Retention(RetentionPolicy.RUNTIME)//保留在运行阶段
public @interface MyPro {
//	定义属性--->抽象方法名
	String className();
	String methodName();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值