Java反射——编写简单”框架“

Java反射是框架设计的灵魂。

现在利用反射原理编写个简单框架:
需求:
1.不通过new一个对象,实现调用类的函数方法
2.写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法
实现:
1. 配置文件
2. 反射
步骤:
1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
2. 在程序中加载读取配置文件
3. 使用反射技术来加载类文件进内存
4. 创建对象
5. 执行方法

一、编写两个class类,Teacher和Student(方便调用)
Teacher

package Reflect;

public class Teacher {
	public void teach() {
		System.out.println("teach...");
	}
}

Student

package Reflect;

public class Student{
	public void study() {
		System.out.println("study...");
	}
}

二、编写配置文件pro.properties(以前都是在其它函数里new一个对象,直接调用,都是硬编码写死了,现在要通过配置文件改变调用类的函数方法)
className代表的是类名
methodName代表的是方法名

#className=Reflect.Teacher
#methodName=teach

className=Reflect.Student
methodName=study

三、利用反射实现简单框架
(1)利用Java中的properties函数创建properties对象
(2)ClassLoad加载class目录下所有文件
(3)classLoader.getResourceAsStream()路径一定要准确,否者加载不到,返回null或加载错误,默认路径是class下,如果不在就填写相对class路径
(4)获取配置文件中的信息
(5)利用Java反射基础——四大核心类Class、Constructor、Method、Field实现获取类名,执行方法

package Reflect;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class reflectTest {
	public static void main(String[] args) throws Exception {
		/*
		步骤:
			1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
			2. 在程序中加载读取配置文件
			3. 使用反射技术来加载类文件进内存
			4. 创建对象
			5. 执行方法
		*/
		
		//1、加载配置文件
		//1.1、创建Properties对象
		Properties pro=new Properties();
		//1.2、加载配置文件,转换为一个集合
		//1.2.1、获取class目录下的配置文件
		ClassLoader classLoader=reflectTest.class.getClassLoader();
		//默认class path路径,返回字节流
		InputStream is=classLoader.getResourceAsStream("Reflect/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);
		
	}
}

结果图:
调用Student
在这里插入图片描述调用Teacher
在这里插入图片描述

总结:一个简单的例子,本来两个new对象就可以实现,结果写了这么多,是不是很繁琐没用,其实正是因为这个框架太小体现不出来,当项目写的十分庞大时,要是硬编码的话,修改、维护、移植都很麻烦,但是有了框架,就只需修改简单的地方就可以达到想要的目的
例如:项目中数据库操作,总不可能每个需要操作的类都创建一个connection连接数据库,例如SSM框架使用配置数据库jdbc.properties文件一劳永逸

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值