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

SpringDI(依赖注入) 以及SpringIOC容器对Bean管理

一、SpringDI(依赖注入)

1.DI依赖注入
1.1 Spring DI的理解

关键字:名词解释

        DI( Dependecy Inject,中文释义:依赖注入)是对Ioc概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IoC 容器注入当前bean对象所需要的另外一个bean对象。(例如在(MyBatis整合Spring 时,SqlSessionFactoryBean依赖(IoC容器注入一个Datasource数据源bean ) ;

1.2 作用

        将springioc容器所创建的各个组件,使用DI的语法进行关联,耦合(胶水)

1.3 DI实现方式
①set注入

语法:

  • set方法
  • set配置

   <property name value ref>

<bean id="controllerImp" class="com.ztt.controller.UserControllerImp">
<property name="service" ref="serviceImp"></property>
</bean>
②构造注入

语法:

  • 构造方法
  • 构造配置

    <constructor-arg name type index value ref>

<bean id="student2" class="com.ztt.pojo.Student">
<constructor-arg name="stuName" value="甜甜"></constructor-arg>
<constructor-arg name="stuAge" value="18"></constructor-arg>
<constructor-arg name="stuHobby" value="学习"></constructor-arg>
</bean>
/****************构造注入*******************/
public Student(String stuName, int stuAge, String stuHobby) {this.stuName = stuName;this.stuAge = stuAge;this.stuHobby = stuHobby;
}public Student() {
}/****************set注入*******************/
public void setStuName(String stuName) {
this.stuName = stuName;
}public void setStuAge(int stuAge) {this.stuAge = stuAge;
}public void setStuHobby(String stuHobby) {
this.stuHobby = stuHobby;
}
③注解注入
1.4 DI数据类型

        基本类型与String

<!--=========================set注入基本类型与String===============================-->
<bean id="student" class="com.ztt.pojo.Student">
<property name="stuName" value="甜甜"></property>
<property name="stuAge" value='18'></property>
<property name="stuHobby" value="学习"></property>
</bean>

        JavaBean

<bean id="serviceImp" class="com.ztt.service.UserServiceImp"><property name="dao" ref="daoImp"></property>
</bean>

        复杂类型,list set array map properties(构造注入不支持)

<!--=========================set注入复杂类型===============================-->
<bean id="teacher" class="com.ztt.pojo.Teacher">
<property name="myList">
<list>
<value>苹果</value>
<value>西瓜</value>
<value>桃子</value>
</list>
</property><property name="array">
<array>
<value>跑步</value>
<value>跳绳</value>
<value>学习</value>
</array>
</property>
<property name="mySet">
<set>
<value>蜜雪冰城</value>
<value>霸王茶姬</value>
<value>茉莉奶绿</value>
</set>
</property><property name="myMap">
<map>
<entry key="甜甜" value="甜甜不甜"></entry>
<entry key="娜娜" value="娜娜不辣"></entry>
<entry key="的的" value="啊的的的"></entry>
</map>
</property>
<property name="myProp">
<props>
<prop key="法国">巴黎</prop>
<prop key="英国">伦敦</prop>
<prop key="美国">华盛顿</prop>
</props>
</property>
</bean>
④DI使用步骤
  • 思考,什么方式,什么数据类型
  • 给属性提供set(构造)方法
  • 编写配置文件

二、SpringIOC容器对Bean管理

1.bean实例化
  • 通过构造方法(默认)
  • 通过工厂方法
  • 通过静态工厂方法
<!--==========================bean的实例化方式1====================================-->
<!--        <bean id="student" class="com.ztt.pojo.Student"></bean>--><!--==========================bean的实例化方式2====================================-->
<!--        <bean id="student" class="com.ztt.pojo.Student" factory-bean="factory" factory-method="createStu"></bean>--><!--        <bean id="factory" class="com.ztt.factory.BeansFactory"></bean>--><!--==========================bean的实例化方式3====================================-->
<!--        <bean id="student" class="com.ztt.factory.StaticBeansFactory" factory-method="createStu"></bean>-->
2.bean作用域
  • 含义:spring对于创建javaBean实例的方式
  • 语法:<bean scope="属性值"></bean>
  • 属性值:

singleton=====>单例(默认)

prototype=====>多例

request=======>一个请求创建一个

session=======>一个会话创建一个

<!--==========================bean的作用域====================================-->
<!--    <bean id="teacher" class="com.ztt.pojo.Teacher" scope="prototype"></bean>-->
3.bean生命周期

实例化

属性赋值(DI)

初始化

        接口 DisposableBean

        属性 destory-method=""

操作使用

销毁了

        接口 InitializingBean

        属性 init-method=""

<!--==========================bean的生命周期====================================-->
<bean id="user" class="com.ztt.pojo.User" init-method="doinit" destroy-method="doDestory">
<property name="uname" value="杨文琪"></property>
</bean>
public class User implements InitializingBean, DisposableBean {private String uname;public void setUname(String uname) {System.out.println("bean生命周期===》属性赋值");this.uname = uname;}public User() {System.out.println("bean生命周期===》实例化");}//接口@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("bean生命周期===》初始化(接口)");}//属性public void doinit() {System.out.println("bean生命周期===》初始化(属性)");}//接口@Overridepublic void destroy() throws Exception {System.out.println("bean生命周期===》销毁(接口)");}//属性public void doDestory() {System.out.println("bean生命周期===》销毁(属性)");}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

SpringDI(依赖注入) 以及SpringIOC容器对Bean管理

一、SpringDI&#xff08;依赖注入&#xff09; 1.DI依赖注入 1.1 Spring DI的理解 关键字:名词解释 DI( Dependecy Inject&#xff0c;中文释义:依赖注入&#xff09;是对Ioc概念的不同角度的描述&#xff0c;是指应用程序在运行时&#xff0c;每一个bean对象都依赖IoC 容器…...

伯克利Linux系统管理: 脚本编写学习 课堂与实验(系统简洁保姆级学习)

Linux系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 第二章(上) Vim课堂与实验 文章目录 Linux系列文章目录一、前言二、学习内容&#xff1a;2.1 上课内容2.1.1 为什么要学习脚本编写&#xff1f;2.1.2 Bash编程语言2.1.3 SheBang2.…...

探索腾讯云AI代码助手的效能与实用性

前言开发环境配置项目实例应用一&#xff1a;功能介绍二&#xff1a;项目测试FFmpeg二次开发SDL应用加密播放器 帮助提升建议结语 ​ 前言 腾讯云的AI代码助手是一款强大的编码辅助工具&#xff0c;利用混元代码大模型技术&#xff0c;提供技术对话、代码补全、代码诊断和优化…...

清华大学终于把Python整理成了《漫画书》

前言 随着人工智能的发展&#xff0c;Python近两年也是大火&#xff0c;越来越多的人加入到Python学习大军&#xff0c;对于毫无基础的人该如何入门Python呢&#xff1f;小编这里整理了一套python编程零基础自学教程&#xff0c;清华大佬196小时讲完的&#xff0c;全程干货无废…...

有关Linux操作系统中僵尸进程与孤儿进程的理解

目录 一、僵尸进程&#xff08;僵死状态&#xff09;1.概念2.进程PID与退出码3.僵尸进程举例4.僵尸进程的危害5.僵尸进程的解决方案 二、孤儿进程1.概念2.特点3.孤儿进程解决僵尸进程 一、僵尸进程&#xff08;僵死状态&#xff09; 1.概念 僵死状态形象点说有点像是没死透的…...

Go语言实现依赖注入

文章目录 前言依赖注入是什么依赖注入的好处是什么结构图应用程序上下文接口上下文管理器暴露的功能使用示例最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;欢迎来到我的博客&#xff0c;今天带领大伙使用Go语言实现依赖自动注入&#xff0c;我们不会使用其它的第三方库…...

不仅能防沉迷游戏的防沉迷软件(Python)

介绍 一个有那么一点功能但是又不太保险的防沉迷工具 我脑子进水了才会写这玩意儿 为了变强&#xff0c;我不择手段&#xff08;笑出zhu jiao 代码 好像没什么用的设定界面 # -*- coding: utf-8 -*- # Environment PyCharm # File_name login |User Pfolg # 2024/…...

数学建模--智能算法之鱼群算法

目录 核心原理 应用与实现 实现步骤 性能分析与改进 鱼群算法在解决哪些具体优化问题方面表现最佳&#xff1f; 如何根据不同的应用场景调整鱼群算法的参数设置以提高其性能&#xff1f; 鱼群算法与其他群体智能优化算法&#xff08;如遗传算法、粒子群优化&#xff09;…...

html+css+js前端作业qq音乐官网5个页面 带js

htmlcssjs前端作业qq音乐官网5个页面 带js 有轮播图&#xff0c;tab切换等多种效果 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编…...

【mars3d】加载超图s3m模型说明

建议替换Cesium库&#xff0c;换成 超图版本Cesium mars3d mars3d-supermap &#xff0c;需要引入的资源为&#xff1a; "mars3d": ["Cesium-supermap/Widgets/widgets.css", //超图版本Cesium "Cesium-supermap/Cesium.js","mars3d/plu…...

LeetCode Hot100 二叉搜索树中第K小的元素

给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;1示例 2&#xff1a; 输入&#xf…...

CBK-D5-安全测试与开发osg15、20、21

CBK-D5-安全测试与开发osg15、20、21 安全评估与测试 构建安全评估和测试方案 安全测试 旨在验证某项控制措施是否正常运行。 包括自动化扫描、工具辅助的渗透测试、破坏安全性的手动测试。 渗透测试可以每年开展一次,以最大限度地降低费用并减小业务中断的影响。 仅简…...

期权杠杆与期货杠杆的区别是什么?

期权与股指期货在杠杆性上展现出截然不同的特性&#xff0c;这些特性对投资者的策略选择具有深远影响。首先&#xff0c;股指期货采用保证金制度&#xff0c;其杠杆比例是恒定的&#xff0c;无论市场如何波动&#xff0c;投资者在月初设定的十倍杠杆到月尾仍保持不变。相比之下…...

数字人解决方案——音频驱动机器人

音频集成 机器人 标志着 人工智能&#xff08;AI&#xff09;。 想象一下&#xff0c;机器人可以通过视觉和听觉导航并与周围环境互动。音频驱动的机器人使这成为可能&#xff0c;提高了它们更高效、更直观地执行任务的能力。这一发展可能会影响到各个领域&#xff0c;包括家庭…...

Linux Tcp 连接 状态 检测 处理

查看不同状态的链接数 netstat -na | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]} 输出如下&#xff1a; TIME_WAIT 2 CLOSE_WAIT 2149 LISTEN 18 ESTABLISHED 214...

String respIson = objectMapper.writeValueAsString(response);

**一、代码解释** 这段代码的作用是使用ObjectMapper&#xff08;假设是 Jackson 的ObjectMapper&#xff09;将一个 Java 对象response转换为 JSON 格式的字符串。 1. ObjectMapper&#xff1a; 它是 Jackson 库中用于在 Java 对象和 JSON 之间进行序列化和反序列化的核心类。…...

git squash、merge 、 rebase

Git Merge、Rebase 和 Squash 之间的区别_git squash-CSDN博客...

案例开发-日程管理2第一期(超详细教程、配备图文和源代码注释,没学过也能看懂)

文章目录 一、 项目前期准备1.数据库准备2.导入依赖3.pojo包处理4.dao包处理5.service包处理6.controller包处理7.加密工具类的使用8.页面文件的导入 总结 一、 项目前期准备 1.数据库准备 创建schedule_system数据库并执行如下语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHE…...

c# 逻辑运算符和条件运算符

前言 在 C# 中&#xff0c;&&、|| 用于处理布尔值&#xff08;true 和 false&#xff09;&#xff0c;而&、|、^ 位运算符可以用于按位操作整数。 后者总是计算其两个操作数 而前者可能不会计算第二个操作数&#xff0c;这取决于第一个操作数的值。 非短路逻辑运…...

Linux驱动开发—设备树传递给内核,匹配驱动过程分析

文章目录 总体流程图传递DTB过程编译设备树源文件将 .dtb 文件与内核或引导加载程序集成 内核初始化阶段解析DTB内核启动阶段解析 DTB注册设备树节点驱动程序绑定 内核解析设备树二进制文件&#xff08;DTB&#xff09;的过程主要分为几个步骤&#xff0c;从设备树的传递到最终…...

【传统图像增强算法1】-直方图均衡化

一、直方图均衡化 1.1 直方图简介 在数字图像处理领域&#xff0c;直方图作为一种可视化统计工具&#xff0c;被广泛应用于图像分析的各个环节&#xff0c;其中灰度直方图是针对单通道图像的核心统计表征。 灰度直方图定量地刻画了图像内部的灰度级分布规律&#xff0c;它能够直…...

AI写论文秘籍!4款AI论文生成工具推荐,告别写论文的痛苦时刻!

你是否也在苦恼于期刊论文的撰写&#xff1f;面对海量的文献资料、繁琐的格式要求&#xff0c;以及不断的修改过程&#xff0c;让许多学术研究者感到效率低下&#xff0c;真的很困扰。不过别担心&#xff0c;下面推荐的四款AI论文写作工具可以帮助你轻松解决这些难题。从文献检…...

告别手动翻找!用Python+uiautomation批量导出微信好友备注(附完整源码)

Pythonuiautomation实现微信好友数据自动化导出实战指南 微信作为国民级社交应用&#xff0c;积累了海量社交关系数据。对于微商、社群运营者或个人知识管理者而言&#xff0c;如何高效整理这些数据成为刚需。本文将带你用Pythonuiautomation打造一个全自动微信好友数据导出工具…...

Python拉取视频流的性能优化实战

一、背景与挑战在安防监控、直播推流、视频分析等场景中&#xff0c;我们经常需要使用Python拉取网络视频流&#xff08;RTSP、HLS、HTTP-FLV等&#xff09;。然而Python并非以高性能著称&#xff0c;面对高码率、多路视频流时&#xff0c;容易遇到&#xff1a;延迟累积&#x…...

为什么你的PHP 8.9异步服务仍卡在I/O?3个致命配置错误+2套生产环境验证方案

第一章&#xff1a;PHP 8.9异步I/O的核心演进与认知重构PHP 8.9并未真实发布——截至2024年&#xff0c;PHP官方最新稳定版本为PHP 8.3&#xff0c;PHP 8.4已进入RC阶段&#xff0c;而PHP 8.9尚属虚构版本。这一标题本质是一次思想实验&#xff1a;它邀请开发者跳出“等待发布”…...

2025届必备的六大AI辅助写作平台横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 进行学术写作以及内容创作之际&#xff0c;使文本的AI生成痕迹得以降低&#xff0c;这是提升…...

2.1 线程创建、优先级与调度算法

操作系统与实时内核:为什么需要线程? 最近在调试一个电机控制项目,遇到了一个典型问题:主循环里既要处理串口指令,又要实时刷新PWM占空比,还得盯着温度保护。烧录进去跑起来,电机一转,串口数据就开始丢包。用逻辑分析仪抓波形,发现PWM更新周期时不时跳变一下——某个…...

打工人必备!8个AI办公神器,每天准时下班不是梦

文档处理工具Notion AI 集成在Notion中的AI功能&#xff0c;支持自动生成文档大纲、会议纪要整理、多语言翻译。通过自然语言输入需求&#xff0c;快速输出结构化内容&#xff0c;适合项目管理与知识库搭建。ChatPDF 上传PDF文件后可直接对话式提问&#xff0c;提取关键信息或总…...

TwinCAT3实战指南:PLC变量与硬件IO的高效绑定技巧

1. TwinCAT3环境搭建与基础概念 第一次接触TwinCAT3的工程师常常会被各种专业术语搞得晕头转向。其实可以把TwinCAT3想象成一个"翻译官"&#xff0c;它负责把PLC程序中的变量指令"翻译"成硬件能听懂的电信号。我刚开始使用时&#xff0c;最头疼的就是变量定…...

FastAPI负载测试终极指南:从配置到性能优化的完整方案

FastAPI负载测试终极指南&#xff1a;从配置到性能优化的完整方案 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi FastAPI作为一款高性…...