总结
- Java的反射机制提供了运行时分析处理类的能力。
- Spring框架的IOC容器使用了反射技术,可以简化代码编写。
- 使用Spring+策略模式可以解决代码中if或switch代码块的代码耦合问题。
概述
反射机制提供的功能:
- 在运行时判断任意一个对象所属的类
- 在运行的时候构造任意一个类的对象
- 在运行时判断一个类所具有的成员变量和方法
- 在运行时调用任何一个对象的方法
- 生成动态代理
反射机制
Java反射机制类
1 | java.lang.Class; //类 |
优点和缺点
- 优点:运行期类型的判断,动态类加载,动态代理使用反射。
- 缺点:性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的java代码要慢很多。
反射机制的应用场景
- 逆向代码 ,例如反编译
- 与注解相结合的框架 例如Retrofit
- 单纯的反射机制应用框架 例如EventBus 2.x
- 动态生成类框架 例如Gson
反射机制的应用
Spring框架的IOC
IOC中最基本的技术就是“反射(Reflection)”编程,,通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象,这种编程方式可以让对象在生成时才决定到底是哪一种对象。只是在Spring中要生产的对象都在配置文件中给出定义,目的就是提高灵活性和可维护性。
我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
Spring反射的策略模式
如果不是用设计模式来做的情况下,会出现很多个 if-else 或者 switch 语句块。这样的话,代码耦合性也会非常高,将来再增加一个需求,则会导致一直增加判断语句块。也违反了面向对象的开闭原则。耦合性也会非常高,将来再增加一个需求,则会导致一直增加判断语句块。也违反了面向对象的开闭原则。反射+策略模式解决代码中if或switch代码块的代码耦合问题。
1 |
|
1 |
|
参考
- Java反射机制及应用场景 - 王道通 - 工作LIFE
- Spring反射+策略模式Demo - Java程序猿部落
- Spring使用反射机制后实现注解实例化Bean注入
- Spring的IOC(控制反转)/DI(依赖注入)原理(一):用到“反射”编程 - Freer