深入理解 Spring IoC 与 DI:控制反转与依赖注入解析

前言:

       在接触 Spring 框架之前,通常我们会在 main 方法或其他业务逻辑中手动 new 对象,然后调用这些对象的方法来完成任务。手动创建对象的方式意味着我们自己掌握了对象的控制权

      然而,在 Spring 中,我们不再直接在代码中手动创建对象,而是将对象的创建、管理、依赖注入等职责交给了 Spring 容器。Spring 框架通过 IoC(控制反转)和 DI(依赖注入)来实现这一点。

      大家伙,这次封面是我把标题发给ai,让它给我画的。你们觉得怎么样哈哈哈~


目录

一、IoC 控制反转

1.字面意思:

2.含义:

3.举个栗子~

二、依赖注入(DI)

1.定义与概念:

2.依赖注入的具体实现: 

a:构造方法注入

依赖注入的流程

b:Setter 方法注入

Setter 方法注入中的Autowired 是否可以省略?

c:属性注入

三、3种DI方式对比

1. 构造函数注入(Spring4.X推荐)

2. Setter 方法注入(Spring 3.X推荐) 

 3. 属性注入(Field Injection)

四、IOC和DI的关系

五、IoC使用了哪些设计模式?


一、IoC 控制反转

1.字面意思:

Inversion of Control :控制权的反转

2.含义:

       是一种设计原则/思想,其核心是将程序中的对象创建、依赖管理和流程控制从应用程序中剥离出来,交给外部容器(如 Spring 框架)管理。IoC 的目的是减少代码耦合,提高代码的可重用性、可测试性和灵活性。


3.举个栗子~

传统编程模型:

在没有 IoC 的情况下,HelloController 类会自己创建 HelloWorld 的实例,控制着依赖的创建和管理。

//一个用来打招呼的类
class HelloWorld {
    public void sayHello() {
        System.out.println("Hello, World!");
    }

}

public class HelloController {
    private HelloWorld helloWorld;

    public HelloController() {
        this.helloWorld = new HelloWorld(); // 自己创建依赖
    }

    public void sayHello() {
        helloWorld.sayHello();
    }
}

这种情况下,HelloController 完全控制了 HelloWorld 的创建过程,这是一种正向控制。

IoC 编程模型:

通过 Spring IoC 容器,这种控制反转了。HelloController 不再创建 HelloWorld,而是通过依赖注入的方式,由外部(Spring 容器)来注入 HelloWorld 的实例。

@Data
@Component
class HelloWorld {
    public void sayHello() {
        System.out.println("Hello, World!");
    }

}


@Controller
public class HelloController {
    @Autowired
    private HelloWorld helloWorld;

    @PostConstruct
    public void sayHello() {
       helloWorld.sayHello();
    }
  
}

控制权被“反转”到了 Spring 框架,Spring 框架决定何时创建、注入和销毁对象,应用程序代码只是被动接收


二、依赖注入(DI)</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值