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

yizhihongxing

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图形界面库,建议使用JavaFX或Swing。本文将以JavaFX为例进行介绍。 2. 创建JavaFX项目 使用IDE工具(如eclipse或IntelliJ IDEA)创建一个JavaFX项目,选择合适的开发环境和JDK版本。创建后,在项目中创建一个JavaFX主…

    Java 2023年5月19日
    00
  • editplus配置java编程环境详细介绍

    EditPlus配置Java编程环境详细介绍 EditPlus是一款文本编辑器,它可以为Java编程者提供良好的编程环境。以下是EditPlus的Java编程环境配置攻略,包括Java 开发工具包(JDK)和编译器环境的配置。 JDK安装 首先,我们需要下载最新的JDK。当前最新版本是JDK 16。通过Oracle官网下载JDK 安装程序并开始安装过程。 安…

    Java 2023年5月23日
    00
  • Java使用反射操作数组示例

    Java反射是在程序运行时可以动态获取类的信息并操作类的属性、方法和构造器。在Java中,数组是一种特殊类型的对象,因此也可以使用反射操作数组。本文将讲述如何使用Java反射操作数组,包括获取数组信息、读取/修改数组元素、创建新数组等。 获取数组信息 要对数组进行反射操作,首先需要获取数组对象的所有信息,常用的方法有以下两种: // 获取数组类型 Strin…

    Java 2023年5月26日
    00
  • 更改MySQL数据库的编码为utf8mb4问题

    更改MySQL数据库的编码为utf8mb4需要经历以下几个步骤: 1. 检查MySQL数据库当前编码 在终端或命令行中运行以下命令: mysql -u 用户名 -p 接着输入你的密码登录MySQL数据库,然后执行以下查询语句检查当前数据库编码: SHOW VARIABLES LIKE ‘%character%’; 2. 备份MySQL数据库 在进行更改编码之…

    Java 2023年5月20日
    00
  • Java 轻松掌握字符缓冲流的使用

    Java 轻松掌握字符缓冲流的使用 什么是字符缓冲流? 字符缓冲流是一种输入/输出流(也叫二进制流),它是基于字符的流,因此与字节流相比,字符缓冲流通常更容易使用和处理。它是对基本的字符输入/输出流的增强(例如 FileReader 和 FileWriter 类),它使用内部缓存区来提高读取和写入数据的性能。 如何使用字符缓冲流 步骤一:创建字符缓冲输入流 …

    Java 2023年5月27日
    00
  • SSH框架网上商城项目第6战之基于DataGrid的数据显示

    SSH框架网上商城项目第6战之基于DataGrid的数据显示攻略 前言 DataGrid是EasyUI中极常用的组件之一,提供了方便、美观、易用的表格展示方式,因此在实际Web开发中也具有广泛的应用。 本文将向大家介绍如何基于SSH框架实现基于DataGrid的数据显示。 准备工作 在开始之前,需要准备以下内容: Eclipse IDE JDK 1.8 To…

    Java 2023年6月16日
    00
  • Java实时获取基金收益项目源码分享

    Java实时获取基金收益项目源码分享 本文介绍使用Java编写程序实时获取基金收益的方法。用户可以输入基金代码,程序会自动访问天天基金网站获取最新的基金收益数据,并实时展示在命令行窗口中。如果用户需要保存数据,程序还提供了将数据保存为CSV文件的功能。 准备工作 在开始编写Java程序之前,需要安装Java开发环境(JDK)以及Maven构建工具。 下载依赖…

    Java 2023年6月1日
    00
  • 使用jpa之动态插入与修改(重写save)

    下面是使用JPA动态插入与修改的完整攻略: 1. 动态插入与修改简介 Java Persistence API(JPA)是JavaEE标准中的一个API规范,主要用于对象关系映射(ORM),方便程序开发人员通过面向对象的方式来操作关系型数据库。在使用JPA进行数据持久化时,我们通常需要使用一些注解来标记实体类,以及一个Repository来进行数据访问操作。…

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