Spring IoC的原理为什么是反射而不是new

Posted IT小甲鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring IoC的原理为什么是反射而不是new相关的知识,希望对你有一定的参考价值。

因为Spring在加载类的实例时,我们知道其实是用工厂的方式,给出一个个实例,而在工厂里面,用了单例,但是真正实例化,则是反射的newInstance来创建对象,而不是new。

那么,为什么是反射的newInstance,而不是new呢?

那么首先我们必须明白,Java里面,反射的目的是什么?

高内聚,低耦合。

进一步,反射比new的好处是什么?

反射不用知道类名,可以直接实例化类,也就是不用硬编码。

有人问了,不知道类名那怎么反射呢?

例子:

通过new,我们这么写:

A a = New A();

通过反射,我们这么写:

Class c = Class.forName(“A”);

factory = (AInterface)c.newInstance();
其中AInterface是类A的接口,如果下面这样写,你可能会理解:
String className = “A”;

Class c = Class.forName(className);

factory = (AInterface)c.newInstance();
进一步,如果下面写,你可能会理解:
String className = readfromXMlConfig;//从xml 配置文件中获得字符串

Class c = Class.forName(className);

factory = (AInterface)c.newInstance();
上面代码就消灭了A类名称,优点:无论A类怎么变化,上述代码不变,甚至可以更换A的兄弟类B , C , D….等,只要他们继承Ainterface就可以。

所以可以总结个答案:

反射可以不用类名实例化对象,并且降低耦合,避免了硬编码。






以上是关于Spring IoC的原理为什么是反射而不是new的主要内容,如果未能解决你的问题,请参考以下文章

Spring的IOC学习

spring的ioc和aop都是啥??

Spring 从0开始IOC 容器底层原理

spring ioc有啥用?

Spring IOC 学习总结

Spring的IOC实现原理:反射+工厂模式具体分析