Spring 设计思想

本文深入探讨了Spring框架中的控制反转(IoC)和依赖注入(DI)设计思想。IoC通过反转对象创建的控制权,降低了代码间的耦合度,而DI则是其实现方式之一。Spring的IoC容器通过XML或注解配置管理对象,简化了对象实例化和依赖关系的管理,增强了项目的可维护性和开发效率。AOP则提供了面向切面编程的能力,进一步补充和完善了面向对象编程的特性。

控制反转 (IoC) 和依赖注入 (DI)

IoC(Inverse of Control, 控制反转)是一种解耦的设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring 框架来管理。它的主要目的是借助于“第三方”(Spring 中的 IOC 容器) 实现具有依赖关系的对象之间的解耦(IOC 容器管理对象,只管使用即可),从而降低代码之间的耦合度。IOC 是一个原则,不是一个模式。

IoC 在其他语言中也有应用,并非 Spring 特有。 IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。

ioc-patterns

将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 **IoC 容器就像是一个工厂一样,当需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。**IoC 容器负责创建对象,将对象连接在一起,配置这些对象,并从创建中处理这些对象的整个生命周期,直到它们被完全销毁。

Spring 时代一般通过 XML 文件来配置 Bean,后来开发人员觉得 XML 文件来配置不太好,于是 SpringBoot 注解配置就慢慢开始流行起来。

Spring IoC的初始化过程:

Spring IoC的初始化过程

在实际项目中一个 Service 类如果有几百甚至上千个类作为它的底层,如果需要实例化这个 Service,每次都要搞清这个 Service 所有底层类的构造函数。如果利用 IOC 的话,只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。

控制反转怎么理解呢? 举个例子:“对象a 依赖了对象 b,当对象 a 需要使用 对象 b的时候必须自己去创建。但是当系统引入了 IOC 容器后, 对象 a 和对象 b 之间就失去了直接的联系。这个时候,当对象 a 需要使用对象 b 的时候,可以指定 IOC 容器去创建一个对象 b 注入到对象 a 中”。 对象 a 获得依赖对象 b 的过程,由主动行为变为了被动行为,控制权翻转,这就是控制反转名字的由来。

DI(Dependecy Inject,依赖注入)是实现控制反转的一种方式,依赖注入就是将实例变量传入到一个对象中去。

AOP 与 IOC 实现原理

IOC: 控制反转。IOC 利用 java 反射机制,将对象交给容器管理,只需要在 spring 配置文件中配置对应的 bean 以及设置相关的属性,让 spring 容器来生成类的实例对象以及管理对象。在 spring 容器启动的时候,spring 会把在配置文件中配置的 bean 都初始化好,然后在需要调用的时候,就把它已经初始化好的那些 bean 分配给需要调用这些 bean 的类。

AOP: 面向切面编程。(Aspect-Oriented Programming) 。AOP 可以说是对 OOP 的补充和完善。OOP 引入封装、继承和多态等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。AOP 利用代理模式,实现 AOP 的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值