Spring核心知识点-IoC控制反转与DI依赖注入

news2024/12/16 14:42:15

1 概念

IoC(Inversion of Control)控制反转:由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。

tips:
【外部】:指的是Spring提供了一个容器,称为IoC容器。IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在1oC容器中统称为Bean。

DI ( Dependency Injection )依赖注入:在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。

2 实际案例

2.1 IoC实例

IoC入门案例思路分析

使用Spring导入哪些坐标?(pom.xml)
如何将被管理的对象告知IoC容器?(配置)
被管理的对象交给IoC容器,如何获取到IoC容器?(接口)
IoC容器得到后,如何从容器中获取bean?(接口方法)

  1. 在pom.xml中导入Spring的坐标
<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context(/artifactId>
		<version>5.2.10.RELEASE</version)
	</dependency>
</dependencies>
  1. 在resources目录下创建applicationContext.xml,并配置相应的bean
<bean id = "bookDao" class = "com.itheima.dao.imp1.BookDaoImp1"/>
  1. 获取SpringIoC容器中的bean.
public static void main(String[] args){

ApplicationContext ctx = new ClassPathXmlApplicationContext( configlocation:"applicationContext.xm1");
BookDao bookDao = (BookDao) ctx.getBean( s:"bookDao");
//调用bean的方法
bookDao.save();

2.2 DI 入门案例

DI入门案例思路分析:(基于IoC管理bean)

1.Service与Dao间的关系如何描述?(配置)
2. Service中使用new形式创建的Dao对象是否保留?(否)
3. Service中需要的Dao对象如何进入到Service中?(提供方法)

以Service调用dao为例:

  1. 删除Service中的new对象方法,提供声明对象对应的set方法。
public class BookServiceImpl implements BookServices {

	private BookDao bookDao; //不用new,通过set方法拿到bean
	
	public void save(){
		System.out.println("book service save ....");
		bookDao.save();	
	}

	public void setBookDao(BookDao bookDao){
		this.bookDao = bookDao;
	}
}
  1. 在applicationContext.xml配置文件中声明bean的注入关系。
<配置bean-->
<!--bean标签标示配置bean
id属性标示fltean起名字
closs属性表示给bean定义类型-->

<bean id="bookdao" class="com.itheima.dao.imp1.BookDaoImp1"/>
<bean ida"bookService" classs"com.itheima.service.imp1.BookServiceImp1">
<!--配置server 与doo的关系-->
<!--property标签表示配置当前bean的属性
name属性表示配置哪一个具体的属性
ref属性表示参照那一个bean-->
<property name="bookDao”refs"bookDao"/>
</bean>

3 总结

在实际项目中,创建Bean以及依赖注入均已经使用了注解的方式来进行,封装的较好,但不利于理解控制反转以及依赖注入等。本专栏打算由浅入深,从基础的配置实现方式进行讲解,来逐步学习Spring的核心思想,常学常新,你我共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2260553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Avalonia的Ribbon

将以前Avalonia项目中的Ribbon单独隔离&#xff0c;提交到了github,方便大家查看修改。 Ribbon做成了组件&#xff0c;但是想要界面效果&#xff0c;还得结合窗体功能开发。 项目地址&#xff1a; jinyuttt/AvaloniaRibbonUI: AvaloniaRibbon component

Vue04

目录 一、学习目标 1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; 2.组件通信 3.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09; 4.进阶语法 二、scoped解决样式冲突 1.默认情况&#xff1a; 三、data必须是一个函数 1、data为什么要写…

C# 探险之旅:第十八节 - 元组(Tuple):神奇的背包与丢弃的艺术,还有变身大法!

嘿&#xff0c;探险家们&#xff01;欢迎再次踏上C#的奇妙旅程。今天&#xff0c;我们要聊的是一个非常实用又有点懒散的旅行伴侣——元组&#xff08;Tuple&#xff09;。想象一下&#xff0c;你正准备来一场说走就走的旅行&#xff0c;但是不想带太多行李&#xff0c;只想简单…

SAP软件如何启用反记账功能

SAP软件和国内ERP软件不一样&#xff0c;它在录入会计凭证时是不可以录入负数的&#xff08;即红冲凭证&#xff09;&#xff0c;因此无法直接实现传统意义上的红字冲销。 比如&#xff0c;如下SAP正常和冲销业务产生会计凭证如下&#xff1a; 正常的业务凭证&#xff1a; 借…

若依-帝可得app后端

视频地址 https://www.bilibili.com/video/BV1pf421B71v?t=510.1 APP后端技术栈 架构解析 验证码功能 开发环境使用改的是固定的验证码 12345正式环境使用的是 阿里云的短信方案@Override public void sendSms(String mobile) {// String code = RandomUtil.randomNumbers(5);…

金融分析-Transformer模型(基础理论)

Transformer模型 1.基本原理 transformer的core是注意力机制&#xff0c;其本质就是编码器-解码器。他可以通过多个编码器进行编码&#xff0c;再把编码完的结果输出给解码器进行解码&#xff0c;然后得到最终的output。 1.1编码器 数据在编码器中会经过一个self-attention的…

JS-手写new

我们先再来理一理原型 Object1 {name:deng,age:18 } Object2 {name:ru,age:18 } const Person function(){} Person.prototype Object1; const p1 new Person(); console.log(p1.name); //deng Person.prototype null; console.log(p1.name); //deng上面给Person的构造函…

深圳国威HB1910数字IP程控交换机 generate.php 远程命令执行漏洞复现

0x01 产品描述: 深圳国威主营国威模拟、数字、IP 交换机、语音网关、IP 电话机及各种电话机。深圳国威电子有限公司HB1910是一款功能强大的网络通信设备,适用于各种企业通信需求。 0x02 漏洞描述: 深圳国威电子有限公司HB1910数字IP程控交换机generate.php存在远程命令执行…

机器学习预处理-表格数据的分析与可视化

机器学习预处理-表格数据的分析与可视化 最近在做一些模型部署的工作&#xff0c;但是发现对于数据的处理、分析、训练方面还是缺少一些系统的学习&#xff0c;因此抽空余时间分析总结一些使用python进行数据处理的实用案例&#xff0c;希望能够方便自己已经其他人的Ctrl CV。…

鸿蒙项目云捐助第六讲鸿蒙App应用的首页导航资讯功能的实现

鸿蒙项目云捐助第六讲鸿蒙App应用的首页导航资讯功能的实现 前面的教程中已实现了启动页&#xff0c;登录页&#xff0c;注册页及首页的部分功能。这里有一些朋友提出问题&#xff0c;如何设置登录页面的背景图片。这里稍带说一个这个功能的实现。 一、登录页面的背景图片实现…

【Vue3】前端使用 FFmpeg.wasm 完成用户视频录制,并对视频进行压缩处理

强烈推荐这篇博客&#xff01;非常全面的一篇文章&#xff0c;本文是对该博客的简要概括和补充&#xff0c;在不同技术栈中提供一种可行思路&#xff0c;可先阅读该篇文章再阅读本篇&#xff1a; FFmpeg——在Vue项目中使用FFmpeg&#xff08;安装、配置、使用、SharedArrayBu…

17、ConvMixer模型原理及其PyTorch逐行实现

文章目录 1. 重点2. 思维导图 1. 重点 patch embedding : 将图形分割成不重叠的块作为图片样本特征depth wise point wise new conv2d : 将传统的卷积转换成通道隔离卷积和像素空间隔离两个部分&#xff0c;在保证精度下降不多的情况下大大减少参数量 2. 思维导图 后续再整…

金蝶云苍穹踩过的坑(慢慢更新)

IDEA不能用最新版&#xff0c;不然搜不到金蝶的插件。 我用的是2024.1.7/2023.1.7 IDEA里增加金蝶插件库的地址也变了&#xff0c;现在是 https://tool.kingdee.com/kddt/idea-updatePlugins.xml 金蝶云苍穹部署在服务器 MAC本地IDEA调试的时候&#xff0c;登录N次能成功一次…

springboot438校园志愿者管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统校园志愿者管理系统信息管理难度大&#xff0c;容错率低&…

高项 - 信息系统管理

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 博文更新参考时间点&#xff1a;2024-11-09 高项 - 章节与知识点汇总&#xff1a;点击跳转 文章目录 高项 - 信息系统管理管理方法管理基础规划和组织设计和实施运维和服务优化和持续改进 管理要点数据管理运维管…

05、GC基础知识

JVM程序在跑起来之后&#xff0c;在数据的交互过程中&#xff0c;就会有一些数据是过期不用的&#xff0c;这些数据可以看做是垃圾&#xff0c;JVM中&#xff0c;这些垃圾是不用开发者管的&#xff0c;它自己会有一套垃圾回收系统自动回收这些内存垃圾&#xff0c;以备后面继续…

【前端开发】HTML+CSS网页,可以拿来当作业(免费开源)

HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content_lizhongyu"widthdevice-width, initial-scale1.0"><title>小兔鲜儿-新鲜、惠民、快捷<…

【Unity3D】无限循环列表(扩展版)

基础版&#xff1a;【Unity技术分享】UGUI之ScrollRect优化_ugui scrollrect 优化-CSDN博客 using UnityEngine; using UnityEngine.UI; using System.Collections.Generic;public delegate void OnBaseLoopListItemCallback(GameObject cell, int index); public class BaseLo…

Git-基础操作命令

目录 Git基础操作命令 case *查看提交日志 log 版本回退 get add . Git基础操作命令 我们创建并且初始化这个仓库以后&#xff0c;我们就要在里面进行操作。 Git 对于文件的增删改查存在几个状态&#xff0c;这些修改状态会随着我们执行Git的命令而发生变化。 untracked、…

Flutter Navigator2.0的原理和Web端实践

01 背景与动机 在Navigator 2.0推出之前&#xff0c;Flutter主要通过Navigator 1.0和其提供的 API&#xff08;如push(), pop(), pushNamed()等&#xff09;来管理页面路由。然而&#xff0c;Navigator 1.0存在一些局限性&#xff0c;如难以实现复杂的页面操作&#xff08;如移…