Spring DI

目录

一、主要概念

1. 依赖

2. 控制反转(IoC)

3. 注入方式

4. Spring容器

二、优点

三、示例


Spring DI(Dependency Injection,依赖注入)是一种设计模式,用于实现控制反转(Inversion of Control,IoC)。在Spring框架中,DI是核心特性之一,通过将对象的创建和管理从应用程序代码中抽离出来,使得程序的组件之间能够更松散地耦合。

一、主要概念

1. 依赖

在面向对象程序中,一个对象(类)通常需要其他对象来完成某些功能,这些需要的对象称为依赖。

2. 控制反转(IoC)

IoC是指将对象的创建和管理权交给容器(如Spring容器),而不是在应用程序代码中直接创建对象。这样可以提高代码的灵活性和可测试性。

3. 注入方式

(1)构造函数注入:依赖通过构造函数传入。适用于强制要求依赖的场景。

public class MyService {  
    private MyRepository myRepository;  

    public MyService(MyRepository myRepository) {  
        this.myRepository = myRepository;  
    }  
}

(2)Setter方法注入:依赖通过公开的setter方法设置。适用于可选依赖的场景。

public class MyService {  
    private MyRepository myRepository;  

    public void setMyRepository(MyRepository myRepository) {  
        this.myRepository = myRepository;  
    }  
}

(3)接口注入:通过接口方法提供依赖。

4. Spring容器

负责对象的创建、配置和生命周期管理。Spring容器会根据配置文件或注解来创建和管理对象。

二、优点

(1)解耦:通过DI,类之间的依赖关系通过容器管理,减少了类间的直接依赖。
(2)可测试性:可以轻松地替换依赖,便于单元测试。
(3)灵活性:可以通过配置文件或注解快速修改依赖对象,而不需要修改源代码。

三、示例

UserService依赖于UserRepository:

public interface UserRepository {
    void save();
}
public class UserRepositoryImpl implements UserRepository {
    public void save() {
        // 保存用户
    }
}
public class UserService {
    private UserRepository userRepository;

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

    public void registerUser() {
        userRepository.save();
    }
}

在xml文件中配置这些类:

<beans>
    <bean id="userRepository" class="com.example.UserRepositoryImpl" />
    <bean id="userService" class="com.example.UserService">
        <constructor-arg ref="userRepository" />
    </bean>
</beans>

或者使用注解:

@Component
public class UserRepositoryImpl implements UserRepository {
    // ...
}

@Component
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}


 

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值