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

小灰灰 2024-03-16 21:45 110阅读 0赞

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

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

构造函数注入

setter 注入

接口注入

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


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

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

  1. 构造函数注入:在对象创建时,通过构造函数将依赖对象注入进来。例如:

    public class UserServiceImpl implements UserService {

    1. private final UserDao userDao;
    2. public UserServiceImpl(UserDao userDao) {
    3. this.userDao = userDao;
    4. }
    5. // ...

    }

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

  1. Setter方法注入:在对象创建后,通过setter方法将依赖对象注入进来。例如:

    public class UserServiceImpl implements UserService {

    1. private UserDao userDao;
    2. public void setUserDao(UserDao userDao) {
    3. this.userDao = userDao;
    4. }
    5. // ...

    }

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

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

    public interface UserDao {

    1. // ...

    }

    public class UserDaoImpl implements UserDao {

    1. // ...

    }

    public class UserServiceImpl implements UserService, ApplicationContextAware {

    1. private UserDao userDao;
    2. @Override
    3. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    4. this.userDao = applicationContext.getBean(UserDao.class);
    5. }
    6. // ...

    }

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

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

发表评论

表情:
评论列表 (有 0 条评论,110人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring四依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注

    相关 spring四依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。 spring提出了依赖