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

Spring IoC(控制反转)和 DI(依赖注入)是关于对象和依赖管理的概念,它们确实从不同的角度描述了相同的过程。

控制反转(IoC)

IoC是一种编程原则,其中对象不负责自己依赖项的创建和管理。相反,对象的创建和依赖关系的管理交由一个外部实体(如容器)来处理。在Spring框架中,这个外部实体就是Spring容器。

在没有IoC的情况下,对象通常会自行创建它们所依赖的其他对象,或者直接在代码中有具体类的详细信息。这种方式导致高耦合和低灵活性,因为对象直接依赖于具体的实现,而不是抽象。

当使用IoC时,对象通过构造函数参数、工厂方法参数或对象的属性来声明它们的依赖关系。对象本身不需要知道如何创建这些依赖对象,也不需要知道具体的实现细节。

依赖注入(DI)

DI是IoC的一种实现,强调了“注入”这个动作。在这个上下文中,“依赖”指的是一个对象依赖于其他对象的服务,“注入”则意味着这些依赖项被动地传递给需要它们的对象,而不是由它们自己去主动获取或创建。

Spring支持多种类型的依赖注入:

  • 构造器注入:通过类的构造器传递依赖项。
  • 设值注入(Setter Injection):通过类的setter方法传递依赖项。
  • 字段注入:将依赖项直接注入到类的字段中。

Spring IoC容器

Spring框架提供了IoC容器,它可以管理定义在配置文件或注解中的对象(Spring术语中称为“beans”)及其依赖关系。Spring容器负责实例化、配置和组装这些Bean。

容器通过读取配置元数据来管理这些对象;这些元数据可以是XML配置文件、Java注解或Java代码提供的。这使得开发者能够构建松散耦合和易于维护的应用程序。

示例

public class UserService {
    private UserRepository userRepository;

    // 构造器注入
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void performSomeAction() {
        // 使用userRepository进行一些操作
    }
}

// 在Spring配置中声明Bean,并注入依赖
<bean id="userService" class="com.example.UserService">
    <constructor-arg ref="userRepository"/>
</bean>
<bean id="userRepository" class="com.example.UserRepository"/>

在这个例子中,UserService 需要 UserRepository 的服务。而不是 UserService 自己创建 UserRepository 的实例,Spring容器将创建 UserRepository 的实例,并通过构造器将其注入到 UserService,实现了依赖注入。

总结来说,IoC是一个更广泛的概念,表明你正在将控制权交给容器;而DI是这一概念的实际执行,即容器通过注入实现控制权的转移。在Spring框架中,这些概念帮助你构建松散耦合、易于测试和维护的应用程序。

  • 28
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java奋斗者

听说打赏我的人再也不会有BUG

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值