Java的反射特征一般结合注解和配置文件(如:XML)来使用,这也是大部分的框架(Spring等)支持两种配置方式的原因。
如果是注解方式:当服务端启动时,Spring框架会去扫描指定目录下的类,通过反射看类有没有Service注解,如果类上有Service注解,会提前初始化(new)这个类。初始化好所有的类以后,再去查找所有的属性,看属性有没有Autowired注解,有的话,会给这个属性注入值(反射赋值)
如果是XML方式:原理也差不多,只不过是先解析XML,拿到XML中的配置信息,再去初始化(new)或给属性反射赋值,所以我们些业务代码的时候才不用一个个的去new实现类,所有的参数都赋上值,这部分的工作Spring已经利用反射技术给完成了的。
1:反射提供了一种”俯瞰”和”透视”类和对象内部信息的能力,让你在处理一些全局性的、常规方法不好搞定的需求的时候,有了降维打击的能力。
2:当你需要在配置文件中决定业务代码需要执行哪个具体类和方法的时候,你用反射。如果没有反射,就没有Strut,如果没有反射,就没有白盒子单元测试。
3:在你编译是不能直接调用,运行时可以调用的情况下,用反射
4:反射和注解,是在框架层编写通用业务代码的好手段,可以有效减少业务代码。
5:通过反射,我们可以在运行时获得程序或程序集中每个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建