解释一下Spring 依赖注入?
依赖注入(Dependency Injection,简称 DI)是 Spring 框架的核心功能之一。依赖注入是一种实现控制反转(Inversion of Control,简称 IoC)的技术,它可以帮助我们解耦代码,并提高代码的可测试性和可维护性。
依赖注入的基本思想是,一个类不应该自己去创建它依赖的对象,而应该由外部(如 Spring 容器)来负责创建和注入这些依赖对象。
例如,假设我们有一个 UserService 类,它依赖于一个 UserRepository 接口。在没有使用依赖注入的情况下,我们可能需要在 UserService 中自己去创建一个 UserRepository 的实现类:
public class UserService {
private UserRepository userRepository = new UserRepositoryImpl();
// ...
}
这样的代码存在一些问题:首先,UserService 与 UserRepositoryImpl 耦合度高,如果我们想替换另一个 UserRepository 的实现,就需要修改 UserService 的代码;其次,这样的代码很难进行单元测试,因为我们无法模拟 UserRepository。
使用依赖注入后,我们可以让 Spring 容器来创建 UserRepository 的实现类,并注入到 UserService 中:
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
这样,UserService 就不再直接依赖于 UserRepositoryImpl,而是依赖于 UserRepository 接口。当我们需要替换 UserRepository 的实现,或者进行单元测试时,都可以更加容易地操作。