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

依赖注入方式

依赖注入方式

  • 思考:向一个类中传递数据的方式有几种?
    • 普通方法(set方法)
    • 构造方法
  • 思考:依赖注入描述了在容器中建立bean与bean之间关系依赖的过程,如果bean运行需要的是数字或字符串呢?
    • 引用类型
    • 简单类型(基本数据类型与String)
  • 依赖注入方式
    • setter注入
      • 引用类型
      • 简单类型
    • 构造器注入
      • 引用类型
      • 简单类型
setter注入(引用类型)
  • 在bean中定义引用类型属性并提供可访问的set方法
    在这里插入图片描述

  • 配置中使用property标签ref属性注入引用类型对象

在这里插入图片描述

setter注入(简单类型)
  • 在bean中定义引用类型属性并提供可访问的set方法
    在这里插入图片描述

  • 配置中使用property标签value属性注入简单类型数据

在这里插入图片描述

构造器注入(引用类型)(了解)
  • 在bean中定义引用类型属性并提供可访问的构造方法
    在这里插入图片描述

  • 配置中使用constructor-arg标签ref属性注入引用类型对象

在这里插入图片描述

构造器注入(简单类型)(了解)
  • 在bean中定义引用类型属性并提供可访问的set方法

在这里插入图片描述

  • 配置中使用constructor-arg标签value属性注入简单类型数据

在这里插入图片描述

构造器注入(参数适配)(了解)
  • 配置中使用constructor-arg标签type属性设置按形参类型注入
    在这里插入图片描述

  • 配置中使用constructor-arg标签index属性设置按形参位置注入

在这里插入图片描述

依赖注入方式选择

  1. 强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现
  2. 可选依赖使用setter注入进行,灵活性强
  3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造注入的形式进行数据初始化,相对严谨
  4. 如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
  5. 实际开发过程中还需要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
  6. 自己开发的模块推荐使用setter注入

在这里插入图片描述

依赖自动装配

  • IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配

  • 自动装配方式

    • 按类型(常用)
    • 按名称
    • 按构造方法
    • 不启用自动装配
  • 配置中使用bean标签autowire属性设置自动装配的类型

在这里插入图片描述

依赖自动装配特征

  • 自动装配用于引用类型依赖注入,不能对简单类型进行操作
  • 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
  • 使用按名称装配时(byName)必须保障容器中具有指定的名称bean,因变量名与配置耦合,不推荐使用
  • 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

集合注入

  • 注入数组对象
    在这里插入图片描述

  • 注入List对象(重点)
    在这里插入图片描述

  • 注入Set对象

在这里插入图片描述

  • 注入Map对象(重点)
    在这里插入图片描述

  • 注入Properties对象

在这里插入图片描述

案例:数据源对象管理(第三方资源配置管理)

  • 导入druid坐标
    在这里插入图片描述

  • 配置数据源对象作为spring管理的bean

在这里插入图片描述

在这里插入图片描述

加载properties文件

  • 开启context命名空间

在这里插入图片描述

  • 使用context命名空间,加载指定properties文件
    在这里插入图片描述

  • 使用${}读取加载的属性值
    在这里插入图片描述

  • 不加载系统属性
    在这里插入图片描述

  • 加载多个properties文件

在这里插入图片描述

  • 加载所有properties文件

在这里插入图片描述

  • 加载properties文件标准格式

在这里插入图片描述

  • 从类路径或jar包中搜索并加载properties文件
    在这里插入图片描述

在这里插入图片描述

创建容器

  • 方式一:类路径加载配置文件

在这里插入图片描述

  • 方式二:文件路径加载配置文件

在这里插入图片描述

  • 加载多个配置文件

在这里插入图片描述

获取bean

  • 方式一:使用bean名称获取

在这里插入图片描述

  • 方式二:使用bean名称获取并指定类型

在这里插入图片描述

  • 方式三:使用bean类型获取

在这里插入图片描述

容器类层次结构图

在这里插入图片描述

BeanFactory初始化

  • 类路径加载配置文件

在这里插入图片描述

  • BeanFactory创建完成后,所有的bean均为延迟加载

小结

在这里插入图片描述

核心容器总结

容器相关
  • BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
  • ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载
  • ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
  • ApplicationContext接口常用初始化类
    • ClassPathXmlApplicationContext
    • FileSystemXmlApplicationContext
bean相关

在这里插入图片描述

依赖注入相关

在这里插入图片描述

在这里插入图片描述

相关文章:

依赖注入方式

依赖注入方式 思考:向一个类中传递数据的方式有几种? 普通方法(set方法)构造方法 思考:依赖注入描述了在容器中建立bean与bean之间关系依赖的过程,如果bean运行需要的是数字或字符串呢? 引用类…...

HTML 超链接 a 标签

在 HTML 标签中,a 标签用于定义超链接,作用是从一个页面链接到另一个页面。 在 a 标签中有两个常用的属性: - href 属性,用于指定链接目标的 url 地址(必须属性)。当为标签应用 href 属性时,…...

【cpolar】Ubuntu本地快速搭建web小游戏网站,公网用户远程访问

🎥 个人主页:深鱼~🔥收录专栏:cpolar🌄欢迎 👍点赞✍评论⭐收藏 目录 前言 1. 本地环境服务搭建 2. 局域网测试访问 3. 内网穿透 3.1 ubuntu本地安装cpolar 3.2 创建隧道 3.3 测试公网访问 4. 配置…...

数字化企业需要什么样的数据中心

随着科技的迅猛发展和数字化浪潮的涌现,企业越来越依赖于强大而高效的数据中心来支持其业务运营和创新发展。数字化企业需要一个先进的、灵活可扩展的数据中心来满足不断增长的数据需求、提高业务灵活性和确保安全性。 以下是数字化企业需要考虑的关键因素&#xf…...

el-table固定表头(设置height)出现内容过多时不能滚动问题

主要原因是el-table没有div包裹 解决&#xff1a;加一个div并设置其高度和overflow 我自己的主要代码 <div class"contentTable"><el-tableref"table":data"tableData"striperow-dblclick"onRowDblclick"height"100%&q…...

从流程优化到经营提效,法大大电子签全面助力智慧零售升级

在新零售模式下&#xff0c;“商业综合体、百货商场、连锁商超、连锁便利店、线上电商平台”等各类商业零售企业借助数字化的手段来改造和重塑传统零售流程和逻辑&#xff0c;实现全面数字化转型&#xff0c;包括线上线下一体化、全场景覆盖、全链条联通、全渠道经营、客户服务…...

Jquery 通过class名称属性,匹配元素

UI自动化过程中&#xff0c;常常需要判断某个元素是否满足条件&#xff0c;再走不通的脚本逻辑&#xff1b;、本文介绍如何通过jquery判断菜单是否展开&#xff0c;来决定是否执行菜单展开脚本&#xff1b;Jquery通过class名称属性&#xff0c;匹配元素 我们先分析&#xff0c;…...

复杂数据统计与R语言程序设计实验二

1、创建一个对象&#xff0c;并进行数据类型的转换、判别等操作&#xff0c;步骤如下。 ①使用命令清空工作空间&#xff0c;创建一个对象x&#xff0c;内含元素为序列&#xff1a;1&#xff0c;3&#xff0c;5&#xff0c;6&#xff0c;8。 ②判断对象x是否为数值型数据。 ③…...

python3:print()打印. 2023-11-18

Python3 print ()不换行输出 import random # 导入random for i in range(10):print(random.randint(1,999), end",") #random.randint(1,999)随机返回1-999间任意一个整数,包括1和999 #print()添加end"" 自定义参数&#xff0c;实现不换行输出效果.end的…...

ARM 版 Kylin V10 部署 KubeSphere 3.4.0 不完全指南

前言 知识点 定级&#xff1a;入门级KubeKey 安装部署 ARM 版 KubeSphere 和 KubernetesARM 版麒麟 V10 安装部署 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名IPCPU内存系统盘数据盘用途ksp-master-1172.16.33.1681650200KubeSphere/k8…...

二元分类模型评估方法

文章目录 前言一、混淆矩阵二、准确率三、精确率&召回率四、F1分数五、ROC 曲线六、AUC&#xff08;曲线下面积&#xff09;七、P-R曲线类别不平衡问题中如何选择PR与ROC 八、 Python 实现代码混淆矩阵、命中率、覆盖率、F1值ROC曲线、AUC面积 指标 公式 意义 真正例 (TP)被…...

专业数据标注公司:景联文科技领航数据标注行业,满足大模型时代新需求

随着大模型的蓬勃发展和相关政策的逐步推进&#xff0c;为数据要素市场化配置的加速推进提供了有力的技术保障和政策支持。数据要素生产力度的不断提升&#xff0c;为数据标注产业带来了迅速发展的契机。 根据国家工信安全发展研究中心测算&#xff0c;2022年中国数据加工环节的…...

.Net8 Blazor 尝鲜

全栈 Web UI 随着 .NET 8 的发布&#xff0c;Blazor 已成为全堆栈 Web UI 框架&#xff0c;可用于开发在组件或页面级别呈现内容的应用&#xff0c;其中包含&#xff1a; 用于生成静态 HTML 的静态服务器呈现。使用 Blazor Server 托管模型的交互式服务器呈现。使用 Blazor W…...

Vue.js 页面加载时触发函数

使用 Vue 的生命周期钩子函数&#xff1a; 在 Vue 组件中&#xff0c;可以使用生命周期钩子函数来执行特定的代码。其中&#xff0c;mounted 钩子函数可以在组件被挂载到 DOM 后触发。 <template><div><!-- 页面内容 --></div> </template>expo…...

Go 语言常用数据结构

1. 请解释 Go 语言中的 map 数据结构&#xff0c;以及它与数组和切片的区别。 ①、解释说明&#xff1a; 在Go语言中&#xff0c;map是一种内置的数据类型&#xff0c;它是一种无序的键值对集合。每个键值对都由一个键和一个值组成&#xff0c;它们之间用冒号分隔。键可以是任…...

【数据结构】图的简介(图的逻辑结构)

一.引例&#xff08;哥尼斯堡七桥问题&#xff09; 哥尼斯堡七桥问题是指在哥尼斯堡市&#xff08;今属俄罗斯&#xff09;的普雷格尔河&#xff08;Pregel River&#xff09;中&#xff0c;是否可以走遍每座桥一次且仅一次&#xff0c;最后回到起点的问题。这个问题被认为是图…...

2342.数位和相等数对的最大和

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2342. 数位和相等数对的最大和 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 哈希表&#xff0c;根据数位和分组后&#xff0c;计算每组中最大两个数之和&#xff0c;然后返回最大值即可。…...

关于Spring Bean的一些总结

一、Spring Bean的生命周期 Spring中的Bean生命周期是指一个Bean从被创建、初始化&#xff0c;到被使用&#xff0c;再到被销毁的整个过程。在Spring容器管理的Bean中&#xff0c;生命周期的管理主要通过回调方法和事件监听来实现。以下是Spring Bean的生命周期的主要阶段和回…...

6.2 List和Set接口

1. List接口 List接口继承自Collection接口&#xff0c;List接口实例中允许存储重复的元素&#xff0c;所有的元素以线性方式进行存储。在程序中可以通过索引访问List接口实例中存储的元素。另外&#xff0c;List接口实例中存储的元素是有序的&#xff0c;即元素的存入顺序和取…...

2023数维杯国际赛数学建模D题完整论文分享!

大家好&#xff0c;终于完成了2023年第九届数维杯国际大学生数学建模挑战赛D题The Mathematics of Laundry Cleaning&#xff08;洗衣清洁的数学原理&#xff09;的完整论文啦。 D论文共43页&#xff0c;一些修改说明10页&#xff0c;正文25页&#xff0c;附录8页。 D题第一问…...

千问3.5-2B轻量化部署教程:边缘设备适配可能性分析与CPU回退方案说明

千问3.5-2B轻量化部署教程&#xff1a;边缘设备适配可能性分析与CPU回退方案说明 1. 模型简介 千问3.5-2B是Qwen系列中的小型视觉语言模型&#xff0c;专为边缘计算场景优化设计。这个2B参数量的版本在保持视觉理解能力的同时&#xff0c;大幅降低了硬件需求。 模型核心能力…...

Z-Image-Turbo-rinaiqiao-huiyewunv实战落地:高校动漫社AI辅助创作工作流搭建

Z-Image-Turbo-rinaiqiao-huiyewunv实战落地&#xff1a;高校动漫社AI辅助创作工作流搭建 1. 项目背景与核心价值 高校动漫社团经常面临创作效率低、人手不足的问题。传统手绘方式需要大量时间&#xff0c;而通用AI绘图工具又难以保持角色一致性。Z-Image Turbo (辉夜大小姐-…...

经典35kW V型磁钢永磁同步电机设计:基于Maxwell的成熟方案解析

基于Maxwell设计的 经典35kW&#xff0c;外径290 轴向长度88 3000RPM&#xff0c;111.5Nm, 6极36槽永磁同步电机&#xff08;PMSM&#xff09;设计案例(V型磁钢)&#xff0c;该案例已制作样机&#xff0c;方案成熟&#xff0c;运行稳定&#xff0c;可直接用于生产&#xff0c…...

告别手速焦虑:大麦抢票神器让你轻松锁定心仪演出

告别手速焦虑&#xff1a;大麦抢票神器让你轻松锁定心仪演出 【免费下载链接】ticket-purchase 大麦自动抢票&#xff0c;支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到演唱会门票而烦恼吗&#…...

天问Block环境下ASRPRO语音芯片实战:语音交互、GPIO控制与PWM调光开发指南

1. 天问Block与ASRPRO芯片开发入门 第一次接触天问Block和ASRPRO语音芯片时&#xff0c;我被它们的组合惊艳到了。这个开发环境就像乐高积木一样&#xff0c;通过拖拽代码块就能完成复杂的功能开发&#xff0c;特别适合像我这样的硬件爱好者。ASRPRO作为一款专为语音交互设计的…...

G-Helper解决华硕笔记本续航衰减的智能调控方案:延长50%使用时间

G-Helper解决华硕笔记本续航衰减的智能调控方案&#xff1a;延长50%使用时间 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF,…...

08_Claude Code之高级工作流与自动化:循环、调度与并行批处理

08 Claude Code之高级工作流与自动化&#xff1a;循环、调度与并行批处理 Claude Code 的真正价值在于自动化能力&#xff0c;而不仅仅是对话工具。本文深度讲解 Plan Mode 的量化对比&#xff08;多文件重构成功率从62%到89%&#xff09;、非交互批处理脚本、并行处理架构、CI…...

告别重复造轮子:用快马AI一键生成SpringBoot通用后台管理模块

最近在做一个后台管理系统的项目&#xff0c;发现每次从零开始搭建SpringBoot框架都要重复写很多样板代码&#xff0c;特别浪费时间。后来尝试用InsCode(快马)平台的AI生成功能&#xff0c;效率提升了好几倍。今天就来分享下如何快速生成SpringBoot通用后台模块。 1. 后台管理…...

RWKV7-1.5B-G1A多模态应用初探:从文本到简单图表描述生成

RWKV7-1.5B-G1A多模态应用初探&#xff1a;从文本到简单图表描述生成 1. 开篇&#xff1a;当语言模型遇见数据可视化 最近在测试RWKV7-1.5B-G1A模型时&#xff0c;我发现一个有趣的现象——这个原本设计用于文本处理的模型&#xff0c;居然能通过巧妙的Prompt设计&#xff0c…...

从一次系统升级说起:聊聊Android PMS如何管理/system/app下的预装应用

Android PMS深度解析&#xff1a;系统预装应用的管理艺术 1. 系统预装应用的特殊地位 在Android生态系统中&#xff0c;预装应用占据着独特的位置。这些位于/system/app目录下的应用与普通用户应用有着本质区别&#xff1a; 系统级权限&#xff1a;预装应用通常拥有更高的系统权…...