Java面试题之Spring IoC

Java面试官 Java面试官 2022.1.4 10:46 浏览(527) 评论 (0)

什么是 Spring IoC 容器?

控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。

Spring IoC 负责创建对象,管理对象,通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。


控制反转(IoC)有什么作用?

  1. 管理对象的创建和依赖关系的维护。对象的创建并不是一件简单的事,在对象关系比较复杂时,如果依赖关系需要程序猿来维护的话,那是相当头疼的;
  2. 解耦,由容器去维护具体的对象;
  3. 托管了类的产生过程,比如我们需要在类的产生过程中做一些处理,最直接的例子就是代理,如果有容器程序可以把这部分处理交给容器,应用程序则无需去关心类是如何完成代理的

 

IoC 的好处有哪些?

  1. 它将最小化应用程序中的代码量。
  2. 它将使您的应用程序易于测试,因为它不需要单元测试用例中的任何单例或JNDI 查找机制。
  3. 它以最小的影响和最少的侵入机制促进松耦合。
  4. 它支持即时的实例化和延迟加载服务。

 

Spring 的 IoC支持哪些功能?

Spring 的 IoC 设计支持以下功能:

  1. 依赖注入
  2. 依赖检查
  3. 自动装配
  4. 支持集合
  5. 指定初始化方法和销毁方法
  6. 支持回调某些方法(但是需要实现 Spring 接口,略有侵入)

其中,最重要的就是依赖注入,从 XML 的配置上说,即 ref 标签。对应 Spring RuntimeBeanReference 对象。

对于 IoC 来说,最重要的就是容器。容器管理着 Bean 的生命周期,控制着 Bean 的依赖注入。

 

Spring IoC 的实现机制

Spring 中的 IoC 的实现原理就是工厂模式加反射机制 。

示例:

interface Fruit {
  public abstract void eat();
}

class Apple implements Fruit {
  public void eat(){
    System.out.println("Apple");
  }
}
class Orange implements Fruit {
  public void eat(){
    System.out.println("Orange");
  }
}
class Factory {
  public static Fruit getInstance(String ClassName) { 
    Fruit f=null;
    try {
      f=(Fruit)Class.forName(ClassName).newInstance(); 
    } catch (Exception e) {
      e.printStackTrace();
    }
    return f;
  }
}

class Client {
  public static void main(String[] a) {
    Fruit f=Factory.getInstance("com.xxx.xxx.Apple");
    if(f!=null){
      f.eat();
    } 
  }
}

本文链接 https://www.mangoxo.com/blog/7DEjgM5q 版权所有,转载请保留地址链接,感谢!

Java面试官 关注
  • 4 动态
  • 0 相册
  • 0 粉丝
  • 2 获赞