核心API应用 反射

3.1.反射应用基础加强
3.1.1.如何理解反射?
反射是Java中特有的一种技术,是JAVA中自省特性的一种实现(对象运行时动态发现对象成员),可以基于此特性实现java的动态编程(例如对象创建,成员调用等).

3.1.2.反射的应用场景?
反射通常用于平台或框架编程,来实现更加通用的编程过程.例如:
1)框架中对象的构建.
2)框架中方法的调用.

框架中反射应用案例分享

1)对象创建
a)mybatis映射元素的resultType,resultMap等.
b)spring中的bean对象(,@Service,…)

2)方法调用
a)对象set方法,get方法,…
b)spring mvc 控制层方法,…

总之:“反射不能预知未来,但可驾驭未来”,通过反射可以更好构建一些编程框架,以实现通用性编程,从而达到简化代码编写。

FAQ:反射有什么缺陷?会存在一定的"性能"问题.

3.1.3.反射核心API及应用加强
反射应用的入口为"字节码对象",任意的一个类在同一个JVM内部,字节码对象是唯一的,此字节码对象会在第一次类加载时创建,用于存储类的结构信息(元数据信息).

基于字节码对象,我们可以获取如下对象:

1)Constructor (构造方法对象类型,基于此对象构建类的实例对象)
2)Field (属性对象类型)
3)Method (方法对象类型)
4)Annotation(注解对象类型)
5)…

反射案例应用分享:

基于字节码对象获取无参构造方法对象,并构建类的实例对象.

//基于类的字节码对象创建类的实例对象
private static <T>T doCreateInstance(Class<T> cls) throws Exception{
	//1.获取类中的无参构造方法对象
	Constructor<T> con=cls.getDeclaredConstructor();
	//2.基于构造方法对象构建类的实例对象
	con.setAccessible(true);//设置构造方法可访问
	return con.newInstance();//默认调用无参构造函数
}

基于字节码对象获取带参构造方法对象,并构建类的实例对象.

@SuppressWarnings("unused")
private static <T>T doCreateInstance(
		Class<T> cls,//字节码对象
		Object[] args,//创建实例对象需要的实际参数
		Class<?>[] paramTypes)throws Exception {
	//1.获取构造方法对象
	Constructor<T> con=
	cls.getDeclaredConstructor(paramTypes);
	//2.基于构造方法对象构建类的实例对象
	return con.newInstance(args);
}

4.1.手写Spring简易工厂

4.1.1.需求分析

核心业务:基于配置文件中的描述,通过一个工厂构建对象实例,并存储实例,然后外界需要时,可以让外界通过特定方法获取需要的实例对象.业务架构如下:
在这里插入图片描述
其中:
1)spring-configs.xml为配置文件
2)Map<String,BeanDefinition>用于存储配置文件信息
3)Map<String,Object>用于存储基于配置信息创建的实例.

4.1.2.业务设计

1.业务实现过程设计
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值