zoukankan      html  css  js  c++  java
  • 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就可以。

    所以可以总结个答案:

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

  • 相关阅读:
    如果经常访问国外站
    CouchDB降临Android
    ubuntu server操作流程百岁版
    开源HTML解析工具包jsoup 1.3.1发布
    LEMP aka LNMP
    VC编译选项
    gae地址
    feedparser 同步博客园rss到 qq zone
    跨系统共享键盘鼠标利器分享:synergy
    支持ff,ie的回车提交
  • 原文地址:https://www.cnblogs.com/ITxiaojiayu/p/9555131.html
Copyright © 2011-2022 走看看