当前位置: 首页 > news >正文

【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

文章目录 1.什么是DI依赖注入2. set方法注入3. ref属性4. 有参构造方法注入5. Lombok6. SpEL 1.什么是DI依赖注入 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种设计模式&#xff0c;也是Spring框架的核心概念之一。其基本思想是将程序中的各…...

甘特图组件DHTMLX Gantt用例 - 如何自定义任务、月标记和网格新外观

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 本文将为大家揭示DHTMLX Gantt自定义的典型用例&#xff0c;包括自定义任务、网格的新外观等&#xff0c;来展示其功能的强大性&…...

auto自动类型推导总结

auto 自动推导的规则很多、很细&#xff0c;当涉及移动语义、模板等复杂的规则时&#xff0c;很容易绕进去。因此&#xff0c;在使用 auto 进行自动推导时&#xff0c;牢记以下几点&#xff1a; auto 推导出的是 “值类型”&#xff0c;不会是 “引用类型”。auto 可以和 cons…...

透视2023,如何看清中国SaaS的未来之路?

导读&#xff1a;什么是更适合中国市场的SaaS道路&#xff1f; 如果用一个关键词概括2023年的SaaS产业&#xff0c;很多人会想到&#xff1a;难。 在过去一年时间内&#xff0c;SaaS产业投融资环境巨变&#xff0c;一级市场投融资笔数和金额骤减。根据IT桔子数据&#xff0c;20…...

分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测(自注意力机制)

分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测&#xff08;自注意力机制&#xff09; 目录 分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测&#xff08;自注意力机制&#xff09;分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Mat…...

博客系统-项目测试

自动化博客项目 用户注册登录验证效验个人博客列表页博客数量不为 0 博客系统主页写博客 我的博客列表页效验 刚发布的博客的标题和时间查看 文章详情页删除文章效验第一篇博客 不是 "自动化测试" 注销退出到登录页面,用户名密码为空 用户注册 Order(1)Parameterized…...

Inspeckage,动态分析安卓 APP 的 Xposed 模块

前提 我在不久前写过《 APP 接口拦截与参数破解》的博文&#xff1b;最近爬取APP数据时又用到了相关技术&#xff0c;故在此详细描述一下 Inspeckage 的功能。&#xff08;环境准备本文不再赘述&#xff09; 功能 在电脑上访问 http://127.0.0.1:8008 就可以看到 inspeckage…...

Windows详细安装和彻底删除RabbitMQ图文流程

RabbiitMQ简介 RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff1a;Advanced Message Queue Protocol&#xff09;的开源消息代理软件&#xff08;亦称面向消息的中间件&#xff09;。RabbitMQ服务器是用Erlang语言编写的&#xff0c;而聚类和故障转移是构建在开放…...

自定义表单规则

const checkF (rule, value, callback) > { if (!value || value ) { callback(new Error(请输入XXXX)); } else { var params new URLSearchParams(); params.append(参数名, value); axios.post(url, params).then(operation > { if (operation && operatio…...

Spring 中 Bean 的作用域有哪些?Spring 中有哪些方式可以把 Bean 注入到 IOC 容器?

Spring 框架里面的 IOC 容器&#xff0c;可以非常方便的去帮助我们管理应用里面的Bean 对象实例。我们只需要按照 Spring 里面提供的 xml 或者注解等方式去告诉 IOC 容器&#xff0c;哪些 Bean需要被 IOC 容器管理就行了。 生命周期 既然是 Bean 对象实例的管理&#xff0c;那意…...

【01低功耗蓝牙开发】

低功耗蓝牙 低功耗蓝牙背后有个基本的概念&#xff1a;任何事物都有状态。状态可以是任何东西&#xff0c;如温度&#xff0c;电池状态等越简单的系统越便宜&#xff0c;开发更迅速&#xff0c;包含更少的错误&#xff0c;更加强健。一种技术想要获得成功必须降低成本。服务器…...

【Java 进阶篇】Java BeanUtils 使用详解

Java中的BeanUtils是一组用于操作JavaBean的工具&#xff0c;它允许你在不了解JavaBean的具体内部结构的情况下&#xff0c;访问和修改其属性。本文将详细介绍Java BeanUtils的使用&#xff0c;包括如何获取和设置JavaBean的属性&#xff0c;复制属性&#xff0c;以及如何处理嵌…...

YugaByteDB -- 全新的 “PostgreSQL“ 存储层

文章目录 0 背景1 架构1.1 Master1.2 TServer1.3 Tablet 2 读写链路2.1 DDL2.2 DML2.3 事务 3 KEY 的设计4 Rocksdb 在 YB 中的一些实践总结 0 背景 YugaByteDB 的诞生也是抓住了 spanner 推行的NewSQL 浪潮的尾巴&#xff0c;以 PG 生态为基础 用C实现的 支持 SQL 以及 CQL 语…...

众佰诚:抖音上做生意卖什么好

随着科技的发展&#xff0c;越来越多的人开始利用网络平台进行创业。抖音作为目前最火的短视频平台之一&#xff0c;也成为了许多人选择的创业渠道。那么&#xff0c;在抖音上做生意卖什么好呢? 首先&#xff0c;我们可以考虑一些具有创新性和独特性的产品。例如&#xff0c;手…...

【Redis】环境配置

环境配置 Linux版本&#xff1a; Ubuntu 22.04.2 LTS 下载redis sudo apt install redis 启动redis redis-server 输入redis-server启动redis竟然报错了&#xff0c;原因是redis已经启动&#xff0c;网上大多数的解决方案如下&#xff1a; ps -ef | grep -i redis 查询redi…...

设计交换机原理图前应先理清的框图

一、系统布局图 需重点考虑“外壳、电源、风扇、主板&#xff08;包含MAC、CPU、PHY&#xff09;、指示灯、管理网口/串口、电口/光口等连接器”在整机中的大致位置&#xff0c;在系统布局图中予以体现。 二、系统框图 &#xff08;1&#xff09;电源整体框图&#xff1b; &…...

Bellman-ford 贝尔曼-福特算法

Bellman-ford算法可以解决负权图的单源最短路径问题 --- 它的优点是可以解决有负权边的单源最短路径问题&#xff0c;而且可以判断是否负权回路 它也有明显的缺点&#xff0c;它的时间复杂度O&#xff08;N*E&#xff09;&#xff08;N是点数 &#xff0c; E是边数&#xff09…...

Docker数据目录迁移解决方案

前置工作 使用以下命令查询当前docker数据目录安装路径&#xff1a; docker info | grep "Docker Root Dir"下文以 /home/rain/docker 这个路径作为要迁移的新 Docker 安装(存储)目录 迁移方案 方法一&#xff1a;软链接 停掉Docker服务&#xff1a; systemctl…...

公共字段自动填充、菜品管理

一、公共字段填充 1.1、问题分析 1.2、实现思路 1.3、代码开发 1.3.1、自定义注解 import com.sky.enumeration.OperationType;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import jav…...

前端面试 面试多起来了

就在昨天 10.17 号,同时收到了三个同学面试的消息。他们的基本情况都是双非院校本科、没有实习经历、不会消息中间件和 Spring Cloud 微服务,做的都是单体项目。但他们投递简历还算积极,从今年 9 月初就开始投递简历了,到现在也有一个多月了。 来看看,这些消息。 为…...

Node.js实战:破解淘宝、天猫商品数据采集中的_m_h5_tk令牌与sign签名验证机制(2023最新版)

1. 淘宝天猫H5端的安全验证机制解析 淘宝和天猫作为国内头部电商平台&#xff0c;在H5端采用了独特的安全验证机制来保护商品数据。这套机制的核心就是**_m_h5_tk令牌和sign签名**的双重验证。我刚开始研究这个机制时踩了不少坑&#xff0c;后来才发现它的设计确实很巧妙。 与…...

用快马平台十分钟复刻notepad++:打造你的轻量级web代码编辑器原型

今天尝试用InsCode(快马)平台快速复刻一个Notepad风格的Web代码编辑器原型&#xff0c;整个过程比想象中顺利很多。作为一个经常需要临时测试代码片段的开发者&#xff0c;这种轻量级工具特别适合快速验证想法。 确定核心功能框架 首先梳理了Notepad最常用的几个功能&#xff1…...

FxSound高级功能开发:插件系统与第三方集成技术深度解析

FxSound高级功能开发&#xff1a;插件系统与第三方集成技术深度解析 【免费下载链接】fxsound-app FxSound application and DSP source code 项目地址: https://gitcode.com/gh_mirrors/fx/fxsound-app FxSound是一款专业的数字音频处理软件&#xff0c;其强大的插件系…...

LaTeX科技论文写作:如何优雅地呈现SenseVoice-Small模型实验数据

LaTeX科技论文写作&#xff1a;如何优雅地呈现SenseVoice-Small模型实验数据 写论文&#xff0c;尤其是技术论文&#xff0c;最头疼的往往不是实验本身&#xff0c;而是如何把那些复杂的模型结构、密密麻麻的数据和曲线图&#xff0c;清晰又专业地呈现在纸上。你辛辛苦苦跑出来…...

基于Simulink的多输出隔离DC-DC交叉调整率优化​

目录 手把手教你学Simulink——基于Simulink的多输出隔离DC-DC交叉调整率优化​ 摘要​ 一、背景与挑战​ 1.1 多输出隔离DC-DC的应用与交叉调整率问题​...

14届蓝桥杯省赛Java B 组Q1+Q3+Q10

题目链接&#xff1a; Q1 蓝桥云课&#xff1a;幸运数字 洛谷&#xff1a;P12324 [蓝桥杯 2023 省 Java B] 幸运数字 Q3 蓝桥云课&#xff1a;矩形总面积 洛谷&#xff1a;P12326 [蓝桥杯 2023 省 Java B] 矩形总面积 Q10 蓝桥云课&#xff1a;阶乘求和 洛谷&#xff…...

Windows 10/11 下保姆级安装TagUI RPA工具指南(含Chrome路径配置与中文乱码解决)

Windows 10/11 下保姆级安装TagUI RPA工具指南&#xff08;含Chrome路径配置与中文乱码解决&#xff09; 在数字化转型浪潮中&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;正成为提升效率的利器。作为一款开源RPA工具&#xff0c;TagUI以其轻量级和易用性吸引了众多…...

Switch视频播放完全指南:使用wiliwili实现离线媒体娱乐

Switch视频播放完全指南&#xff1a;使用wiliwili实现离线媒体娱乐 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端&#xff0c;目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili …...

从软件到硬件:Taalas ASIC如何让AI成为“物理基础设施”

当AI推理速度突破15000 tokens/秒&#xff0c;我们谈论的不再是“更快的服务”&#xff0c;而是“消失的延迟”。过去两年&#xff0c;大模型领域的竞争焦点高度集中在算力堆叠和参数规模上。GPU成为稀缺资源&#xff0c;英伟达H200、B200的发布一次次刷新算力上限&#xff0c;…...

FLUX.1-dev镜像免配置部署:5分钟启动影院级Text-to-Image服务

FLUX.1-dev镜像免配置部署&#xff1a;5分钟启动影院级Text-to-Image服务 想体验一下“所见即所得”的顶级AI绘画吗&#xff1f;今天&#xff0c;我们一起来部署一个开箱即用的FLUX.1-dev旗舰版镜像。它集成了当前开源界最强的文本生成图像模型之一&#xff0c;并且针对24GB显…...