什么是反射机制?反射机制的应用场景有哪些?

1.反射机制介绍

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法功能称为Java语言的反射机制。

2.获取Class对象的两种方式

如果我们动态获取到这些信息,我们需要依靠Class对象。Class类对象将一个类的方法、变量等信息告诉运行的程序。
1.如果指定具体类的情况下可以使用

Class alunbarClass = TargetObject.class;

但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取Class对象。
2.通过Class.forName()传入类的路径获取

Class alunbarClass1 = Class.forName("cn.javaguidde.TargetObject");

3.根据对象获取

Person p = new Person();
Class c = p.getClass();

3.静态编译和动态编译

静态编译:编译时确定类型,绑定对象
动态编译:运行时确定类型,绑定对象

4.反射机制优缺点

优点:运行期间判断类型,动态加载类,提高代码灵活度
缺点:
1.性能瓶颈:
反射相当于一系列解释操作,通知JVM要做的事情,性能比直接的Java代码要慢很多
2.安全问题:
让我们可以动态操作改变类的属性同时也增加了类的安全隐患。

5.反射的应用场景

1.我们在使用JDBC连接数据库时使用class.forName()通过反射加载数据库的驱动程序
2.Spring框架的IOC(动态加载管理Bean)创建对象以及AOP功能都和反射有联系
3.动态配置实例的属性

6.反射和new的区别

1.new只能用于编译期就能确定的类型,私有属性外部不能访问。而反射可以在运行时才确定类型并创建对象。私有属性外部可以访问,增加了灵活性。
2.解耦合。比如你写一个DAO接口,就不需要每次都new一个实例,只需要在配置时候写好交给Spring,然后在要使用的时候拿出来就可以了。

new实例化和反射实例化有什么区别?
Reflection:Java反射机制的应用场景
https://segmentfault.com/a/1190000010162647?utm_source=tuicool&utm_medium=referral

Java基础之—反射(非常重要)
https://blog.csdn.net/sinat_38259539/article/details/71799078

你可能感兴趣的:(什么是反射机制?反射机制的应用场景有哪些?)