垃圾收集器 vs IOC

Garbage collector vs IOC

今天参加面试我是java,spring开机的新手。面试官问了关于垃圾收集器的问题。我说过垃圾收集器会释放未使用的资源。然后他问了IOC容器,我说它控制对象的创建并且会注入依赖的bean。然后他问为什么我们需要使用IOC容器我说它不会每次都创建一个新对象它会使用现有的。他再次问,好吧,创建新对象有什么问题,因为垃圾收集器会释放内存,那么我们为什么要使用 IOC ..?我被困在这里。请帮助更好地理解这一点

简而言之,您并不总是想要新对象,因为它们可以非常expensive/slow被创建。

IOC 容器允许您的组件放弃对如何创建和管理依赖项的控制。

例如:如果我以传统方式创建一个 DAO layer/class,我的 DAO 层需要知道如何创建数据源。这可以被管理,但想象更多 类 现在需要知道如何创建数据源。

使用IOC,你DAO层会说:嘿!我需要一个数据源实例。现在,由 IOC 容器找到一个并为您提供。您仍然需要向 IOC 提供一种为您创建此实例的方法。但在这种情况下,你 all DAO 层可以保持 cohesive 并且只做他们应该做的事情——执行交易。这也将允许您创建专家 类 / 负责以专门方式处理数据库连接的组件。

在spring中,所有bean默认都是单例的。这意味着 Spring 上下文中只有一个实例。您不需要多次创建它们。

IOC 的目的不是为了简化 GC 的运行。就是放开你的组件和依赖是如何创建的。