Java基础之教你如何正确运用依赖注入

Java基础之教你如何正确运用依赖注入

什么是依赖注入?

依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这个模式中,对象在被创建的时候所需的依赖关系被动态注入到对象中。这种方式有助于减少模块之间的耦合性,同时也增强了代码的可扩展性和可维护性。

依赖注入的三种方式

依赖注入有三种方式:构造器注入,Setter注入和接口注入。

  • 构造器注入:通过构造函数注入依赖。
  • Setter注入:通过Setter方法注入依赖。
  • 接口注入:依赖的注入发生在类实现的接口中。

如何实现依赖注入

使用构造器注入

构造器注入是最常见的注入方式。类中的构造函数会接受所需要的依赖作为参数并将其保存在对象中,因此在创建对象的时候就可以通过依赖注入的方式注入需要的依赖。

public class SampleService {
    private SampleDao dao;
    public SampleService(SampleDao dao) {
        this.dao = dao;
    }
}

使用Setter注入

Setter注入的方式通过提供Setter方法接收依赖。通过Setter方法设置变量,Setter方法通常具有set前缀。

public class SampleService {
    private SampleDao dao;
    public void setDao(SampleDao dao) {
        this.dao = dao;
    }
}

使用接口注入

接口注入是通过接口来实现的。 在接口中,我们定义了一些方法,这些方法配合注入的依赖来工作。

public interface Sample {
    public void setDao(SampleDao dao);
}

public class SampleService implements Sample {
    private SampleDao dao;
    public void setDao(SampleDao dao) {
        this.dao = dao;
    }
}

依赖注入的优点

  • 降低了系统的耦合度:组件之间的依赖关系在系统启动时完成了注入,而不是在代码中直接引用。
  • 方便使用:所有的依赖都被集中在了同一个地方,可以更加便捷的管理依赖。
  • 易于扩展:新的组件可以通过注入方式来加入系统,而不需要修改原有的代码,这样就便于系统后期的扩展。

示例说明

示例1

假设现在有一个登录模块,需要校验用户名和密码是否匹配。其中,身份校验功能由LoginService类实现,而数据校验功能由Validator类实现。需要在LoginService类中调用Validator的方法来完成密码的校验。

在这种情况下,如果不使用依赖注入,那么校验方法可能会这样写:

public class LoginService {
    public boolean loginCheck(String userName, String password) {
        Validator validator = new Validator();
        if ( validator.check(password)){
            return true;
        } else {
            return false;
        }
    }
}

public class Validator {
    public boolean check(String password) {
        return "123456".equals(password);
    }
}

现在,我们使用依赖注入实现这个功能。

public class LoginService {
    private Validator validator;
    public LoginService(Validator validator) {
        this.validator = validator;
    }
    public boolean loginCheck(String userName, String password) {
        if (validator.check(password)){
            return true;
        } else {
            return false;
        }
    }
}

public class Validator {
    public boolean check(String password) {
        return "123456".equals(password);
    }
}

示例2

假设现在有一个Dao类和一个Service类:

public class SampleDao {
    public void save() {
        System.out.println("save data");
    }
}

public class SampleService {
    private SampleDao dao;

    // 构造器注入
    public SampleService(SampleDao dao) {
        this.dao = dao;
    }

    // Setter注入
    public void setDao(SampleDao dao) {
        this.dao = dao;
    }

    // 业务方法
    public void doDataSave() {
        dao.save();
    }
}

在这个例子中,我们在SampleService中使用了构造器注入和Setter注入两种方式来实现依赖注入,同时,SampleService类中的doDataSave()方法调用了SampleDao中的save()方法。设置好依赖关系之后,我们就可以在调用SampleService类中的doDataSave()方法时,自动注入SampleDao的依赖,从而实现数据持久化操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础之教你如何正确运用依赖注入 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • MySQL之JSON类型字段的使用技巧分享

    MySQL之JSON类型字段的使用技巧分享 在MySQL 5.7及以上版本中,除了常见的数据类型之外,还新增了一个JSON类型字段。JSON类型的字段可以存储JSON格式的数据,对于存储半结构化数据非常方便。本文将详细讲解JSON类型字段的使用技巧,包括JSON格式、创建、插入、更新、查询等操作。 1. JSON格式的数据 JSON(JavaScript O…

    Java 2023年5月26日
    00
  • 通过实践了解如何处理Java异常

    处理 Java 异常的攻略如下: 异常概述 Java 异常能够帮助我们处理程序运行时的错误或者问题,同时在出现异常情况下,也可以给用户展示错误信息,方便问题的排查与解决。Java 中的异常主要分为两类:已检查异常(Checked Exception)和运行时异常(Runtime Exception)。已检查异常通常是在方法声明中显式申明的,需要在方法调用处进…

    Java 2023年5月26日
    00
  • Log4j关闭Spring和Hibernate日志打印方式

    请注意,Log4j是一个Java类库,用于记录日志信息。它允许您控制应用程序日志记录输出的格式,位置和其他属性。 如果您使用Spring和Hibernate作为应用程序的框架,那么很有可能您需要禁用它们的日志记录;也就是说,当您运行应用程序时,您不希望在日志输出中看到Spring或Hibernate的消息。 下面是一些简单的步骤,可以帮助您关闭Spring和…

    Java 2023年5月20日
    00
  • Java实现聊天室界面

    实现Java聊天室界面的攻略如下: 1. 选择Java图形界面库 首先需要选择合适的Java图形界面库,建议使用JavaFX或Swing。本文将以JavaFX为例进行介绍。 2. 创建JavaFX项目 使用IDE工具(如eclipse或IntelliJ IDEA)创建一个JavaFX项目,选择合适的开发环境和JDK版本。创建后,在项目中创建一个JavaFX主…

    Java 2023年5月19日
    00
  • Spring中的注解@Autowired实现过程全解(@Autowired 背后的故事)

    下面是关于“Spring中的注解@Autowired实现过程全解”的详细攻略: 什么是@Autowired注解? @Autowired是Spring Framework中常用的一个注解,通过它可以实现依赖注入(DI),即自动将一个需要的对象注入到另一个对象中。使用@Autowired注解,可以避免手动编写繁琐的getter、setter方法以及硬编码的依赖对…

    Java 2023年5月19日
    00
  • SpringMVC中常用注解与使用方法详解

    SpringMVC中常用注解与使用方法详解 SpringMVC是一个基于MVC的Web框架,是Spring Framework的一部分,用于构建Web应用程序。SpringMVC使用注解作为开发的重要手段,本文将详细讲解SpringMVC中常用注解的使用方法。 1. @Controller注解 @Controller注解用于标注一个控制器,也就是Spring…

    Java 2023年6月16日
    00
  • Java实例化的几种方法总结

    Java实例化的几种方法总结 在Java中,对象是类的一个实例,而实例化则是创建这个实例的过程。Java提供了多种实例化对象的方法。以下是几种常见的实例化方法总结: 1. 使用new关键字 使用new关键字是最常见的实例化对象的方法。语法如下: ClassName objectName = new ClassName(); 其中,ClassName表示类的名…

    Java 2023年5月26日
    00
  • Java终止线程实例和stop()方法源码阅读

    Java中有多种方式可以终止线程,其中包括共享变量、使用interrupt()方法、使用stop()方法等,本文着重讲解stop()方法的使用和源码阅读。 1. stop()方法的使用 stop()方法是Thread类中提供的方法,可以立即终止线程的执行。但是,它并不推荐使用,因为它可能会导致线程未能完成它该做的任务,引发不确定的错误。 下面是stop()方…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部