温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java依赖注入如何理解

发布时间:2026-10-26 08:27:53 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

Java 依赖注入(Dependency Injection,简称 DI)是一种设计思想,核心目的是:把“对象需要的依赖”由外部提供,而不是对象自己创建。

下面用“通俗 + 示例 + 原理”的方式帮你理解。


一、先理解“依赖”是什么

假设有一个 UserService 需要使用 UserRepository:

public class UserService {
    private UserRepository userRepository;
}

这里:

  • UserService 依赖 UserRepository
  • UserRepository 就是 UserService 的依赖对象

二、不用依赖注入(反面例子)

public class UserService {
    private UserRepository userRepository = new UserRepository();
}

问题:

  1. 耦合度高:UserService 直接控制 UserRepository 的创建
  2. 难测试:想换一个假的 UserRepository 很麻烦
  3. 难维护:改构造方式要改很多类

三、依赖注入怎么做?

✅ 核心思想

依赖由外部传入,而不是内部 new

1️⃣ 构造器注入(最推荐)

public class UserService {
    private UserRepository userRepository;

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

使用时:

UserRepository repo = new UserRepository();
UserService service = new UserService(repo);

✅ 好处:

  • 依赖清晰
  • 不可变(final)
  • 易测试

2️⃣ Setter 注入

public class UserService {
    private UserRepository userRepository;

    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

适合可选依赖。


四、Spring 中的依赖注入(最常见)

Spring 帮你自动管理依赖关系。

示例(Spring Boot)

@Service
public class UserService {
    private final UserRepository userRepository;

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

或者更简洁(推荐):

@Service
public class UserService {
    private final UserRepository userRepository;

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

Spring 会:

  1. 创建 UserRepository
  2. 创建 UserService
  3. 把 UserRepository 注入进去

五、依赖注入解决什么问题?

问题 解决方式
高耦合 外部注入
难测试 可注入 Mock
维护困难 集中管理
代码重复 容器管理

六、一句话总结

依赖注入 = 别自己 new,让别人(框架 / 调用方)给你

如果你愿意,我也可以用生活类比(比如“外卖 vs 自己做饭”)或结合 Spring 源码层级再讲一遍。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手