什么是依赖注入?可以通过多少种方式完成依赖注入?

在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC 容器将它们装配在一起。

通常,依赖注入可以通过三种方式完成,即:

构造函数注入

setter 注入

接口注入

在 Spring Framework 中,仅使用构造函数和 setter 注入。


依赖注入(Dependency Injection,DI)是一种设计模式,其目的是将对象的依赖关系与对象本身的创建和使用分离开来。依赖注入使得应用程序代码更加松耦合,更加容易维护和测试。

依赖注入的基本思想是,对象不再使用new关键字来创建它所依赖的对象,而是将依赖对象通过构造函数、setter方法或接口注入进来。这样,对象就不需要知道如何创建它所依赖的对象,而只需要知道如何使用它们。依赖注入可以通过以下方式完成:

  1. 构造函数注入:在对象创建时,通过构造函数将依赖对象注入进来。例如:
public class UserServiceImpl implements UserService {
    
    
    private final UserDao userDao;
    
    public UserServiceImpl(UserDao userDao) {
    
    
        this.userDao = userDao;
    }
    
    // ...
}

在上面的示例中,UserServiceImpl对象的依赖关系通过构造函数注入。

  1. Setter方法注入:在对象创建后,通过setter方法将依赖对象注入进来。例如:
public class UserServiceImpl implements UserService {
    
    
    private UserDao userDao;
    
    public void setUserDao(UserDao userDao) {
    
    
        this.userDao = userDao;
    }
    
    // ...
}

在上面的示例中,UserServiceImpl对象的依赖关系通过setter方法注入。

  1. 接口注入:在对象创建时,通过实现一个接口将依赖对象注入进来。例如:
public interface UserDao {
    
    
    // ...
}

public class UserDaoImpl implements UserDao {
    
    
    // ...
}

public class UserServiceImpl implements UserService, ApplicationContextAware {
    
    
    private UserDao userDao;
    
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    
    
        this.userDao = applicationContext.getBean(UserDao.class);
    }
    
    // ...
}

在上面的示例中,UserServiceImpl对象实现了ApplicationContextAware接口,并通过ApplicationContext接口获取UserDao对象。

除了上述方式,还可以通过注解、XML配置等方式来完成依赖注入。Spring框架提供了多种依赖注入的方式,开发人员可以根据自己的需求选择最合适的方式。

猜你喜欢

转载自blog.csdn.net/a772304419/article/details/131331956