反射
1.如何理解反射
反射是Java中特有的一种技术,是JAVA中自省特性的一种实现(对象运行时动态发现对象成员),可以基于此特性实现java的动态编程(例如对象创建,成员调用等).
2.反射的应用场景
1)框架中对象的构建.
a)mybatis映射元素的resultType,resultMap等
b)spring中的bean对象(,@Service,…)
2)框架中方法的调用.
a)对象set方法,get方法,…
b)spring mvc 控制层方法,…
3.案例分析
1)基于字节码对象获取无参构造方法对象,并构建类的实例对象.
//基于类的字节码对象创建类的实例对象
private static <T>T doCreateInstance(Class<T> cls) throws Exception{
//1.获取类中的无参构造方法对象
Constructor<T> con=cls.getDeclaredConstructor();
//2.基于构造方法对象构建类的实例对象
con.setAccessible(true);//设置构造方法可访问
return (T)con.newInstance();//默认调用无参构造函数
}
2)基于字节码对象获取带参构造方法对象,并构建类的实例对象.
@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.总结
反射在框架中应用较多,另外在手写spring构建实例对象时,也多次用到反射。想要了解更详细的,可面向百度。部分内容摘自齐*的文档,在此向老师表达敬意。看过的小伙伴可以评论和支持哦!