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日

相关文章

  • 关于Struts2文件上传与自定义拦截器

    关于Struts2文件上传与自定义拦截器的完整攻略 文件上传 环境配置 在使用Struts2进行文件上传之前,需要进行相关的环境配置。首先需要在struts.xml文件中配置org.apache.struts2.dispatcher.multipart.MultiPartRequest类型的解析器: <constant name="strut…

    Java 2023年5月20日
    00
  • VScode 打造完美java开发环境最新教程

    VS Code 打造完美 Java 开发环境最新教程 Visual Studio Code 是一款免费、轻量级且功能强大的 IDE,非常适合 Java 开发人员使用。本文将介绍如何使用 VS Code 打造完美的 Java 开发环境。 安装 Java 开发环境 在 VS Code 中开发 Java 需要先安装 Java 开发环境。可以从 Oracle 官网下…

    Java 2023年5月19日
    00
  • 25基于java的在线考试系统

    一、项目简介 随着互联网迅速发展,人们的生活已经越来越离不开互联网,人们足不出户就可以工作、买卖、学习等。对于在校学生,通过网络教育不仅可以随时进行网络学习,也可以根据学习的情况自我检测,有利于学生高效、快捷地掌握所学的知识。本系统预设计的基于网络的学生自测系统将实现多种用户(包括学生、教师)同时访问,学生登录后可以针对课程的每一章节的每一道题目,提交答案;…

    Java 2023年5月6日
    00
  • 十二、脚本元素、指令和预定义变量

    当我们编写网页时,脚本元素、指令和预定义变量都可以用于实现交互功能。下面是相关的完整攻略: 脚本元素 脚本元素用于在网页中嵌入javascript代码,常见的有script标签和事件属性。script标签可以放在head或body中,用于加载外部js文件或直接在网页中编写javascript代码。而事件属性则是作为HTML标签的属性,用于指定某种事件触发时所…

    Java 2023年6月15日
    00
  • Java超详细讲解类变量和类方法

    让我来为你详细讲解“Java超详细讲解类变量和类方法”的完整攻略。 什么是类变量和类方法? 在Java中,类变量和类方法都属于类级别的,也叫做静态成员。静态成员是和类直接关联的,而不是和对象实例关联的,可以通过类名来访问。类变量也叫做静态变量,它是指被 static 修饰的变量。类方法也叫做静态方法,它是指被 static 修饰的方法。 类变量的使用 类变量…

    Java 2023年5月26日
    00
  • JavaWeb搭建网上图书商城毕业设计

    下面是详细讲解“JavaWeb搭建网上图书商城毕业设计”的完整攻略。 概述 实现一个基于JavaWeb技术的网上图书商城,需要掌握以下几个方面的知识和技能:- 前端开发:HTML、CSS、JavaScript、jQuery等基础知识。- 后端JavaWeb开发:Servlet、JSP、JDBC、MVC框架等技术。- 数据库MySQL的使用,包括SQL语句的编…

    Java 2023年5月20日
    00
  • springboot项目集成swagger-bootstrap-ui全过程

    下面就为大家详细讲解“springboot项目集成swagger-bootstrap-ui全过程”的完整攻略。 1. 前置条件 在集成Swagger Bootstrap UI之前,您需要确保满足以下两个前置条件: 已经拥有一个基于Spring Boot框架的Web应用程序。 已经清楚了解Swagger的基本概念和使用方式。 如果您还不了解Swagger,可以…

    Java 2023年5月31日
    00
  • 浅谈Java中File文件的创建以及读写

    浅谈Java中File文件的创建以及读写 在Java中,我们可以使用File类同时实现文件的创建和读写操作。下面将详细介绍File类的相关操作。 创建File文件 我们可以通过File类创建文件,具体代码如下: import java.io.*; public class CreateFile { public static void main(String…

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