反射机制是spring的基础。
最简单的例子:ORM,当数据库的表变了,查询的返回变了,那么只需要修改 对应POJO类、mapper即可。
----------------------------------
首先,明白静态语言与动态语言的区别
Java是一门静态语言,但是反射提供了一种黑魔法,允许在运行时去动态修改一个类的定义,一个对象的属性等等,给静态语言加上了“动态”的效果
Java反射可以简单的理解为Class的一种抽象,我们知道,Java是面向对象语言,一切皆对象,都是某种抽象,可以理解反射就是对Class的抽象,所以,通过反射,你可以获取类名,注解,属性,构造器,gettter/setter等等,动态调用方法,修改属性,修改属性的访问权限等等
Java反射的应用很多,如,JSON的序列化/反序列化,JDK动态代理,AOP等
作者:SevenLin澤耿
链接:https://www.zhihu.com/question/377483107/answer/1069386587
2、运行时加载类是动态加载类
Class c = Class.forName("类的全名"),不仅表示了类的类型,还表示了动态加载类,编译不会报错,在运行时才会加载,使用接口标准能更方便动态加载类的实现。功能性的类尽量使用动态加载,而不用静态加载。
很多软件比如QQ,360的在线升级,并不需要重新编译文件,只是动态的加载新的东西。