• Spring-依赖注入


    Spring框架中,依赖注入(Dependency Injection, DI)是一种设计模式,用于降低代码间的耦合度,让对象的依赖关系由容器在运行时自动管理。
    依赖注入是时下最流行的IoC实现方式,依赖注入分为
            接口注入(Interface Injection)
            Setter方法注入(Setter Injection)
            构造器注入(Constructor Injection)
    三种方式。其中接口注入由于在灵活性和易用性比较差,现在从 Spring4开始已被废弃。

    1. 构造器注入

            构造器注入是指通过类的构造函数来传递依赖。当一个Bean需要它的依赖项时,Spring容器会使用一个匹配的构造函数来创建这个Bean的实例,并将依赖项作为构造函数的参数传入。这种方式确保了对象在构造时就是完全初始化的,且所有必要的依赖都是不可变的。 

    1. @Service
    2. public class UserService {
    3. private final UserRepository userRepository;
    4. @Autowired
    5. public UserService(UserRepository userRepository) {
    6. this.userRepository = userRepository;
    7. }
    8. // 其他业务方法...
    9. }

    在这个例子中,UserRepository 是通过构造器注入到 UserService 中的,表明 UserService 实例化时就必须有 UserRepository 的实例,增强了代码的不变性和清晰度。

    2. Setter方法注入

            Setter方法注入则是通过调用Bean的setter方法来完成依赖的注入。这种方式提供了更多的灵活性,因为依赖可以在对象创建之后的任何时间点设置,但这也意味着对象可能在一段时间内处于不完全初始化的状态。 

    1. @Service
    2. public class UserService {
    3. private UserRepository userRepository;
    4. @Autowired
    5. public void setUserRepository(UserRepository userRepository) {
    6. this.userRepository = userRepository;
    7. }
    8. // 其他业务方法...
    9. }

    这里,UserRepository 是通过 setUserRepository 方法注入到 UserService 中的。这种方式允许在构造对象时不立即提供所有依赖,但可能会导致对象在使用前未完全配置好,影响代码的健壮性。

    总结

            1. 构造器注入 更倾向于保证对象的完全初始化和不变性,适合那些依赖关系不应更改的场景。
            2. Setter方法注入 提供了更高的灵活性,允许在对象创建后动态修改依赖,但可能引入更多潜在的错误,比如对象可能在依赖注入完成前被错误地使用。

    Spring框架推荐优先使用构造器注入,因为它促进了 immutability(一个对象一旦创建,其状态就不能被修改) 和更好的测试性,同时也便于理解类的依赖关系。然而,在具体实践中,应根据实际需求和场景选择最适合的注入方式。 

  • 相关阅读:
    在get对象属性时发现没有get对应的方法
    读写算杂志社读写算编辑部读写算杂志2022年第30期目录
    工程结算的23个问题及技巧
    7.20 SpringBoot项目实战【图书详情-学生端】:图书信息 + 评论列表 + 是否收藏
    封装了一个简单的C++ HDF5工具库,实现常用数据类型的读写
    数据库内核面试中我不会的问题(3)
    Effective Java学习笔记---------并发
    「计算机基础」进制转换
    SaltStack 常用的一些命令
    基于区块链的数据共享访问控制模型
  • 原文地址:https://blog.csdn.net/m0_47743175/article/details/139463363