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日

相关文章

  • java实现文件重命名的方法

    这里是“Java实现文件重命名的方法”的完整攻略,包含两条示例。 1. Java实现文件重命名的方法 Java提供了renameTo()方法来实现文件重命名。该方法位于Java File类中,其语法如下: public boolean renameTo(File dest) 其中dest为需要重命名后的文件路径。 该方法返回值为布尔型,如果重命名成功则返回t…

    Java 2023年5月19日
    00
  • SpringBoot整合Kafka工具类的详细代码

    下面是SpringBoot整合Kafka工具类的详细代码攻略。 环境准备 确认已经安装JDK、Maven和Kafka 在Maven中添加Kafka依赖 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kaf…

    Java 2023年5月19日
    00
  • 详解如何将JAVA程序制作成可以直接执行的exe文件

    当我们开发了一个 Java 程序后,要想方便地给其他人使用,就需要将其制作成可执行的 exe 文件。下面是将 Java 程序制作成 exe 文件的详细攻略。 1. 概述 制作 Java 可执行文件的方式主要有两种,一种是使用打包软件,如 JSmooth、Launch4j 等,另一种是使用安装包制作工具,如 InstallShield、Inno Setup 等…

    Java 2023年5月19日
    00
  • java导出生成word的简单方法

    下面我将详细讲解“Java导出生成Word的简单方法”。本攻略分为以下几个部分:环境准备、添加依赖、生成Word文档、示例说明、常见问题解决。 环境准备 在开始之前,需要准备以下环境: JDK1.8以上 Maven IDEA或Eclipse等开发工具 添加依赖 Java生成Word文档需要使用到Apache POI和docx4j两个依赖,将以下代码添加到po…

    Java 2023年5月26日
    00
  • Java 正则表达式详解

    Java 正则表达式详解攻略 什么是正则表达式 正则表达式是一种用来描述字符串的特定模式的表达式,是一种通用的字符串处理方式。用于快速的匹配、查找、替换和格式化文本。 Java中正则表达式的主要类为java.util.regex,支持正则表达式的操作有两种方式:String类对正则表达式的直接支持和利用java.util.regex包提供的支持。 正则表达式…

    Java 2023年5月19日
    00
  • java注解处理器学习在编译期修改语法树教程

    下面是一份关于“java注解处理器学习在编译期修改语法树教程”的详细攻略: 什么是Java注解处理器? Java注解处理器原指可以处理Java源代码中的注解,并且它们在编译期间运行。它们提供了一种利用注解来完成某些类似于AOP(面向切面编程)的操作的方式。 Java注解处理器是一个编译器的插件,可以在代码编译过程中自动运行,并且可以添加、计算或删除代码。 编…

    Java 2023年5月20日
    00
  • 详解hibernate双向多对多关联映射XML与注解版

    关于“详解hibernate双向多对多关联映射XML与注解版”的攻略,我将从以下几个方面进行详细讲解: 双向多对多关联映射的概念与要素 Hibernate双向多对多关联映射XML版的实现步骤及示例 Hibernate双向多对多关联映射注解版的实现步骤及示例 接下来我会一一进行详细讲解。 一、双向多对多关联映射的概念与要素 双向多对多关联映射,指的是两个实体类…

    Java 2023年5月19日
    00
  • hadoop 全面解读自定义分区

    Hadoop全面解读自定义分区攻略 Hadoop是处理大数据的优秀框架,其MapReduce编程模型是处理大数据的常见方式。默认情况下,Hadoop框架按照哈希函数对MapReduce输出进行分区。该分区策略无法满足所有分区需求,因此引入自定义分区。本文将详细介绍Hadoop自定义分区的攻略。 自定义分区介绍 默认情况下,Hadoop框架使用哈希函数对Map…

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