spring为什么要用ioc和di?

Why does spring use ioc and di?

我是 spring 5 的新手,我的问题是为什么 spring 使用 DI 和 IOC?我的意思是为什么我们必须在 XML(遗留)中编写 bean,然后在我们需要的地方创建它?在我们想要使用发生在 spring 容器中的这种复杂机制之前,为什么我们不使用一种方法来代替给我们那个对象?

还有一个问题是,读取XML不会减慢程序速度吗?因为反正我们是从硬盘读取的。

注意:确实可以使用注解,但是现在想请教一个关于阅读xml.

的问题

Spring IoC容器是Spring框架的核心。它创建对象,配置和组装它们的依赖关系,管理它们的整个生命周期。容器使用依赖注入 (DI) 来管理组成应用程序的组件。它从配置文件 (XML) 或 Java 代码或 Java 注释和 Java POJO class 中获取有关对象的信息。这些对象称为 Bean。由于 Java 对象及其生命周期的控制不是由开发人员完成的,因此得名 Inversion Of Control。 更多关于 link HERE

至于你的第一部分问题。

why does spring use DI

为了让开发人员保持他的代码松散,而不是纠缠 classes,它使您的代码保持干净。 在面向对象设计中,耦合度是指一个class的设计在多大程度上依赖于另一个class的设计。换句话说,class A 中的变化与 class B 中的力相关的变化多久发生一次?紧耦合意味着两个 class 经常一起变化,松耦合意味着它们大部分是独立的。一般来说,松散耦合是推荐的,因为它更容易测试和维护。

You may find this paper by Martin Fowler (PDF) helpful.

I mean why do we have to write the beans in an XML (legacy) and then create it where we need it

注意:我们在 XML 中编写 bean,它是在应用程序启动时查看 bean 定义时创建的,从技术上讲,您永远不会创建 bean,您只从 [=63= 中获取创建的 bean ] 在您启动应用程序时 Spring 为您创建的容器 (IOC)。

我们正在编写 bean 蓝图,或者只是 bean,以便可以构建它,在应用程序启动时将其放置在 Spring 容器中,然后我们可以随意使用它来获取它getBean 方法。 “为什么”的全部要点是因为默认情况下所有 bean 的作用域都是单例的,这意味着,当您获取一个 bean 并随心所欲地使用它时,您不必担心内存或任何事情,Spring如果 bean 的范围是 Singleton,则会为您处理这些 bean。

第二个问题:

And another question is, does not reading XML slow down the program? Because we are reading from the hard disk anyway.

注释和XML在性能上没有区别,只是方法不同,我不确定你所说的“从硬盘读取”是什么意思,但不管怎样你都会有要配置您的应用程序,是的,许多论坛更喜欢 运行 而不是 XML,但在我看来,唯一的原因是当您在 XML 中编写错误的配置时,它是与 Java 中会抛出异常的配置相比,更难找到它。 XML、application.properties文件需要重新部署应用,而注解和java配置需要重新编译你的项目,所以两者都有“缺陷”,但这是正常的,很好理解对我来说。

但最后我认为这是一个偏好问题,我个人认识不少人将注释与 XML 配置相结合,他们比我更了解 Spring .

所以总而言之,编写 bean 及其配置是很痛苦的,就像你可以编写 class 带有方法而不为其创建接口一样,因为结果是相同的,但这会有所帮助你很长运行因为你不必担心内存或者你是否销毁了那个bean或者你没有。

如果你能读到

1.Lazy initialization of beans

2.Eager initialization of beans

3.Singleton scope of beans

4.Prototype scope of beans