Orm之Reflect(一)

Orm_Reflect_DB——Reflect(一)

ORM系列章节列表(点击查阅)

一、ORM之开篇
反射的机制以及概念我这里就不一一阐述了,度娘会告诉你。我这里主要说一下反射的应用和常用方法:

一、反射的应用:

1、反编译.class->.java;
2、通过反射机制访问Java的所有方法、属性、以及实例化对象,设置包括google源码中的hide方法;
3、这个就比较高大上了,可以用于框架的封装,达到最大程度的适配。

二、反射的常用方法:

1、如何获取Class<?>对象,这里的Class是一个类的名字,我们称之为字节码文件类,Java虚拟机会将我们写的Java文件编译成.class文件,从而衍生了这个类,通过访问.class文件的方式,达到访问Java代码的作用。
 /**
	 * 获取Class对象
	*/
	//第一种方式,通过全类名获取
	Class<?> clazz = Class.forName("com.pdm.io.Person");
	//第二种,通过属性获取
	Class<?> clazz = Object.class;
	//第三种,通过getClass方法获取
	Class<?> clazz = Object.getClass();
2、如何获取Java类中的方法:
    /**
	* 获取方法
	*/
	//根据全类名找到实体类
   <span style="white-space:pre">	</span> String className = "com.pdm.io.Person";
        //得到实体类对应的Class对象
	Class<?> clazz = Class.forName(className);
	//实例化类
	Object obj = clazz.newInstance();
		
	String methodName = "show";
	//这里获得的是公共方法,如果想获取所有方法,可用getDeclaredMethod,第二个参数是传入参数类型的Class集合
	Method show = clazz.getMethod(methodName, new Class[]{String.class,int.class});
	show.invoke(obj, "pdm" , 56);
3、如何获取Java类中的成员变量:
    /**
	* 获取字段
	*/
	String className = "com.pdm.io.Person";
	Class<?> clazz = Class.forName(className);
	String fieldName = "age";
	//获取age字段对象(公共成员字段)getField(fieldName)
	//获取所有声明字段
	Field field = clazz.getDeclaredField(fieldName);
	//设置不做权限检查
	field.setAccessible(true);
	//要先对其值的设置,必须现有对象
	Object obj = clazz.newInstance();
	field.set(obj, 56);
4、如何获取获取Java类中的构造函数,实现实例化对象目的:
    /**
	* 通过指定构造函数初始化对象
    * 1、获取字节码文件对象
	* 2、获取指定构造函数
    * 3、通过构造函数初始化对象
	*/
	Class<?> clazz = Class.forName("com.pdm.io.Person");
	//这里根据传入参数类型找到对应构造
	Constructor<?> con= clazz.getDeclaredConstructor(new Class[]{String.class,int.class});
	Object obj = con.newInstance("pdm" , 21);
	//如果是空参构造实例化,直接通过Class对象newInstance即可
	//Object obj = clazz.newInstance();
反射听起来高大上,其实不外如是,用来用去就那几个方法,当然要用好也还是有难度的,Reflect的基础讲完,我们马上进入正题,通过Orm和Reflect实现数据库查询功能吧,相信你们已经非常期待了吧。
源码:Orm_Reflect_DB




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值