怎么免费建个免费的站点/net的网站建设
文章目录
- 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依赖注入 依赖注入(Dependency Injection,简称DI)是一种设计模式,也是Spring框架的核心概念之一。其基本思想是将程序中的各…...

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

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

透视2023,如何看清中国SaaS的未来之路?
导读:什么是更适合中国市场的SaaS道路? 如果用一个关键词概括2023年的SaaS产业,很多人会想到:难。 在过去一年时间内,SaaS产业投融资环境巨变,一级市场投融资笔数和金额骤减。根据IT桔子数据,20…...

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

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

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

Windows详细安装和彻底删除RabbitMQ图文流程
RabbiitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP:Advanced Message Queue Protocol)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而聚类和故障转移是构建在开放…...

自定义表单规则
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 容器,可以非常方便的去帮助我们管理应用里面的Bean 对象实例。我们只需要按照 Spring 里面提供的 xml 或者注解等方式去告诉 IOC 容器,哪些 Bean需要被 IOC 容器管理就行了。 生命周期 既然是 Bean 对象实例的管理,那意…...

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

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

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 浪潮的尾巴,以 PG 生态为基础 用C实现的 支持 SQL 以及 CQL 语…...

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

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

设计交换机原理图前应先理清的框图
一、系统布局图 需重点考虑“外壳、电源、风扇、主板(包含MAC、CPU、PHY)、指示灯、管理网口/串口、电口/光口等连接器”在整机中的大致位置,在系统布局图中予以体现。 二、系统框图 (1)电源整体框图; &…...

Bellman-ford 贝尔曼-福特算法
Bellman-ford算法可以解决负权图的单源最短路径问题 --- 它的优点是可以解决有负权边的单源最短路径问题,而且可以判断是否负权回路 它也有明显的缺点,它的时间复杂度O(N*E)(N是点数 , E是边数)…...

Docker数据目录迁移解决方案
前置工作 使用以下命令查询当前docker数据目录安装路径: docker info | grep "Docker Root Dir"下文以 /home/rain/docker 这个路径作为要迁移的新 Docker 安装(存储)目录 迁移方案 方法一:软链接 停掉Docker服务: 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 月初就开始投递简历了,到现在也有一个多月了。 来看看,这些消息。 为…...

Qt常见类名关系整理
1、QAbstractItemModel与QAbstractItemView 模型的基类: The QAbstractItemModel class provides the abstract interface for item model classes. Inherited By: QAbstractListModel,QAbstractProxyModel,and QAbstractTableModel 视图的基类: The QAbstractIte…...

YOLO8实战:yolov8实现行人跟踪计数
本篇文章首先介绍YOLOV8实现人流量跟踪计数的原理,文末附代码 引言:行人跟踪统计是智能监控系统中的重要功能,可以广泛应用于人流控制、安全监控等领域。传统的行人跟踪算法往往受到光照、遮挡等因素的干扰,难以实现准确跟踪。随着深度学习技术的发展,目标检测模型逐渐成为…...

shell脚本学习-2
文章目录 一、shell参数传递二、shell中的特殊变量三、shell中的函数四、shell函数中的参数 一、shell参数传递 运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用$n的形式来接收,例如,$1 表示第一个参数&…...

web3:智能合约浏览器版本的 IDE - remix 使用教程
如果你是一位web3行业的从业者,那么智能合约一定是要接触的,这里我们就智能合约浏览器版本的 IDE-remix来介绍一下,及简单的使用操作 目录 Remix简介官方网址语言设置使用编辑合约编译合约部署合约测试验证Remix简介 Remix 是一个开源的 Solidity 智能合约开发环境,是一款…...

信号类型(通信)——QPSK、OQPSK、IJF_OQPSK调制信号
系列文章目录 《信号类型(通信)——仿真》 《信号类型(通信)——QAM调制信号》 文章目录 前言 一、QPSK通信调制信号 1.1、原理 1.2、仿真 二、OQPSK通信调制信号 1.1、原理 1.2、仿真 三、IJF_OQPSK通信调制信号 1.1、…...

常用压缩文件操作函数总结
常用压缩文件操作函数总结 1- 解压gz文件 gzip -d xx.gz 2- 函数 1 打开文件 函数名: gzopen 功能描述: 打开名为file的gz文件 参数: file:文件名 mode:打开模式 r 返回值: 打开的gz文件描述符 gzFile gzopen(const char *file, const char…...

leetcode_274 H指数
1. 题意 在数组中找到最大的k, 使得至少k个数不小于k。 H指数 2. 题解 2.1 排序 从大到小排序完后,直接模拟即可。 class Solution { public:int hIndex(vector<int>& citations) {sort( citations.begin(), citations.end() );int res 0;int cur …...

微服务框架Consul--新手入门
Consul Consul 是由 HashiCorp 开发的一款软件工具,提供了一组功能,用于服务发现、配置管理和网络基础设施自动化。它旨在帮助组织管理现代分布式和微服务架构系统的复杂性。以下是Consul的一些关键方面和功能: 服务发现:Consul …...

docker运行syslog-ng,搭建日志服务器
Splunk 的数据很多是用syslog-ng 来收集的。 使用docker 来搭建syslog-ng 服务器还是很方便的。 #create network docker network create -d macvlan --subnet=192.7.0.0/16 --gateway=192.7.0.1 -o parent=ens35 docker-out docker network create -d macvlan --ipv6 --sub…...

Redis代替session实现用户验证
一、Redis代替session实现用户验证。 下图是session的实现登录需要实现的代码模块,虽然可以实现完整功能,但是仍然存在一些问题。 在以往使用session当作用户验证的过程中,会有session共享的问题,每次承担请求的tomcat是不一样…...