java反射获得注释_Java反射、注解

1.反射

e377231a6b339c8a209c6317892cddfc.png

6f2a48d36cf9c664bb551407fdb0a906.png

e436a101d888c74500fda5cfc6cb2ee0.png

054da86b4eef1a429824f03e22b8e751.png

0bd5ec4944161d5e66f0d07ff45c71c5.png 

abccd3d26c74f50489a256cf01f215a8.png

案例:

需求:写一个“框架”,不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法

实现:

1.配置文件

2.反射

步骤:

1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中

2.在程序中加载读取配置文件

3.使用反射技术来加载类文件进内存

4.创建对象

5.执行方法

代码:

结构:

e21aabcf77e8f0236cc0dd5c9697958f.png

在src下创建File(配置文件),命名pro.properties

e2bb138f6d3b8d9f764bd60485dd3ef7.png

文件内容:

className =cn.itcast.domain.Student

methodName= sleep

Student中有sleep方法:

public classStudent {public voidsleep() {

System.out.println("sleep...");

}

}

Person中有eat方法:

public classPerson {public voideat() {

System.out.println("eat...");

}public voideat(String food) {

System.out.println("eat..."+food);

}

}

ReflectTest:

/*** 框架类*/

public classReflectTest {public static void main(String[] args) throwsException {

/*前提:不能改变该类的任何代码,可以创建任意类的对象,可以执行任意方法*/

//1.加载配置文件//1.1创建properties对象

Properties pro = newProperties();//1.2加载配置文件,转换为一个集合//1.2.1获取class目录下的配置文件

ClassLoader classLoader = ReflectTest.class.getClassLoader();

InputStream is= classLoader.getResourceAsStream("pro.properties");

pro.load(is);//2.获取配置文件中定义的数据

String className = pro.getProperty("className");

String methodName= pro.getProperty("methodName");//3.加载该类进内存

Class cls =Class.forName(className);//4.创建对象

Object obj =cls.newInstance();//5.获取方法对象

Method method =cls.getMethod(methodName);//6.执行方法

method.invoke(obj);

}

}

运行ReflectTest的结果:

961f7967355b527c3baa469d78307f13.png

如果想要读取不同类的不同方法,不需要修改ReflecTest的代码,只要修改配置文件pro.properties的内容即可,例如,将代码修改如下:

className =cn.itcast.domain.Person

methodName= eat

运行ReflectTest的结果:

d693ea3bc597aad18d2eaf0732730ba0.png

PS:后来想到Person中还有一个有参的eat方法,实现调用的方法:将ReflectTest中下列语句:

//5.获取方法对象

Method method =cls.getMethod(methodName);//6.执行方法

method.invoke(obj);

修改为:

//5.获取方法对象

Method method = cls.getMethod(methodName,String.class);//6.执行方法

method.invoke(obj,"饭");

运行ReflectTest的结果:

9e8365e516d4ccf326383329ba59a24b.png

2.注解

53627a1ee2ca9c740633e91cb6658e3a.png

dbdc9ec6a3c0567c5bfaa18f34d4e853.png

957f57cd82af9066cb4617b1a1c2157a.png

8f8029dbb0960623f96308da4eafde50.png

b6b793bb5b4402058b8144975d75101c.png

1cef4348e93adc73a127e146d92b1f13.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值