Java 依赖注入(Dependency Injection,简称 DI)是一种设计思想,核心目的是:把“对象需要的依赖”由外部提供,而不是对象自己创建。
下面用“通俗 + 示例 + 原理”的方式帮你理解。
假设有一个 UserService 需要使用 UserRepository:
public class UserService {
private UserRepository userRepository;
}
这里:
UserService 依赖 UserRepositoryUserRepository 就是 UserService 的依赖对象public class UserService {
private UserRepository userRepository = new UserRepository();
}
问题:
UserService 直接控制 UserRepository 的创建UserRepository 很麻烦依赖由外部传入,而不是内部 new
public class UserService {
private UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
使用时:
UserRepository repo = new UserRepository();
UserService service = new UserService(repo);
✅ 好处:
public class UserService {
private UserRepository userRepository;
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
适合可选依赖。
Spring 帮你自动管理依赖关系。
@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 会:
UserRepositoryUserServiceUserRepository 注入进去| 问题 | 解决方式 |
|---|---|
| 高耦合 | 外部注入 |
| 难测试 | 可注入 Mock |
| 维护困难 | 集中管理 |
| 代码重复 | 容器管理 |
依赖注入 = 别自己 new,让别人(框架 / 调用方)给你
如果你愿意,我也可以用生活类比(比如“外卖 vs 自己做饭”)或结合 Spring 源码层级再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。