【Spring】DI依赖注入,Lombok以及SpEL

2023-10-31 21:52

本文主要是介绍【Spring】DI依赖注入,Lombok以及SpEL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.什么是DI依赖注入
  • 2. set方法注入
  • 3. ref属性
  • 4. 有参构造方法注入
  • 5. Lombok
  • 6. SpEL

1.什么是DI依赖注入

依赖注入(Dependency Injection,简称DI)是一种设计模式,也是Spring框架的核心概念之一。其基本思想是将程序中的各个组件之间的依赖关系从程序内部转移到外部容器中,从而实现松耦合,以便于开发测试。

具体来说,依赖注入是指在程序运行期间,由外部容器动态地将依赖对象注入到组件中。例如,可以通过构造函数注入、Setter注入、注解注入等方式来实现依赖注入。

⭐ 简单来说DI依赖注入就是要让Spring来给Bean对象的属性进行赋值

2. set方法注入

在Java中,set方法注入是一种依赖注入的方式。它通过调用对象的setter方法来注入依赖关系。这种方式通常用于将一个对象的属性设置为另一个对象。

例如,假设我们有一个名为Student的类,它有一个属性为name的String类型变量和一个属性为age的int类型变量。我们可以使用set方法注入来将这些属性设置为其他对象。

可以在Spring的配置文件配置Bean对象时进行设置,使用<property>标签

示例: 比如这里有一个Student类,有age和name两个属性
在这里插入图片描述
接下来通过bean标签将bean对象注入Spring容器中,同时通过<property>这个标签对Student类的这两个属性进行注入
在这里插入图片描述
接下来获取Bean对象,并进行打印
在这里插入图片描述
可以看到配置的值已经注入进去了

🔺注意: 虽然上面是在配置文件中进行的属性注入,但是本质上还是set方法注入.很好验证, 如果把set方法注释掉,那么配置文件中配置的相应属性就会报错

在这里插入图片描述

3. ref属性

除此之外,如果成员变量中有引用数据类型,类如:一个类中有另外一个类的实例,会需要使用bean标签中的ref属性
还是Student类,除此之外还有School这个类的实例,

public class Student {private int age;private String name;private School school;
}

age和name因为是Student类的属性,很好进行注入. 那如何注入School这个属性呢?
这时候就需要使用ref这个属性了
看下图:
在这里插入图片描述
对于School这个类实例成员变量,不能直接注入,我们要先把School注入到Spring容器中,然后在Student的bean标签中使用ref属性将School进行注入,同时别忘了前提条件是有对应的setter方法.

如果要注入School类中的成员变量,就需要在school这个bean标签中使用<property>这个标签进行注入

4. 有参构造方法注入

有参构造注入是一种依赖注入的方式,它通过在类的构造函数中传入依赖对象来实现依赖注入。这种方式通常用于将一个对象的属性设置为另一个对象。

还是刚才的Student类,同样是在配置文件中进行注入,使用的标签:<constructor-arg>. 与set方法注入类似,只是换了一个方法和标签而已
示例:

public class Student {private int age;private String name;public Student(int age, String name) {this.age = age;this.name = name;}
}

在这里插入图片描述
在这里插入图片描述

在Java中除了基本数据类型,还有一些其它的数据类型.例如:List,Set和Map等. 这种类型的数据要如何注入呢?其实也是类似的,复杂类型可以差分成简单的类型进行注入.

5. Lombok

在前面的示例中以及在平时的开发中,我们可以看到一些类的setter和getter方法以及构造方法都需要使用到,虽然IDEA可以帮我们生成,但是如果类中的成员变量很多,就会不可避免的会觉得代码比较臃肿.
接下来来学一个小工具Lombok

Lombok是一个Java库,它能够自动插入编辑器并构建工具,从而简化Java开发。这个库的主要功能是通过注解的方式,让开发人员不需要手动编写例如getter或setter等样板式代码。此外,Lombok还提供了自动化日志变量,通过简单的注解,可以让类拥有完全功能的构建器。

先来体验一下Lombok

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private int age;private String name;public static void main(String[] args) {User user1 = new User();user1.setAge(16);user1.setName("zhangsan");User user2 = new User(18,"lisi");System.out.println(user1.toString());System.out.println(user2.toString());}
}
  • @Data: 此注解可以帮助我们生成一些setter,getter,toString等方法
  • @NoArgsConstructor: 空参的构造方法
  • @AllArgsConstructor: 全参的构造方法
    如图所示:
    在这里插入图片描述
    ⭐需要注意的是,Lombok并非一个标准的Java库,在使用时,还需要在项目的构建文件中添加对应的maven依赖以及安装Lombok 对应的插件。
    Lombok所需要的依赖:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version>
</dependency>

Lombok插件
在这里插入图片描述

6. SpEL

Spring表达式语言,全称“Spring Expression Language”,简称为“SpEL”,是一种功能强大的Spring表达式语言,全称“Spring Expression Language”,简称为“SpEL”,是一种功能强大的表达式语言。它类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与Spring功能完美整合,如能用来配置Bean定义。

示例:

@Data
public class Student {private int age;private String name;
}

之前在注入Student类的成员变量是,都是直接写的具体数字.
在这里插入图片描述
上面这种的话数据是写死的,不够灵活,如果想要动态变化,就可以使用SPEL表达式,是需要使用#{表达式}这种形式来实现.

例如:
在这里插入图片描述
在这里插入图片描述
上述只是一个简单的示例.
SpEL具有丰富的表达式类型,例如字面表达式、布尔和关系运算符、正则表达式、类表达式、访问属性、数组、列表和映射、方法调用等。表达式语言一般是用最简单的形式完成最主要的工作,以此减少工作量。例如,我们可以使用# {expression}作为SpEL表达式的默认格式,表达式主体包围在花括号中。

这篇关于【Spring】DI依赖注入,Lombok以及SpEL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/318392

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有