第二章 IOC

news2024/9/28 19:16:17

1.IOC底层原理

*什么是IOC:控制反转,把对象创建和对象之间的调用过程交给Spring进行管理

*使用IOC的目的:降低耦合度

*IOC底层原理:xml解析+工厂模式+反射

*IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

*Spring提供IOC容器实现的两种方式(两个接口):

(1)BeanFactory:是Spring内部使用的接口,不提供开发人员进行使用。加载配置文件时不会创建对象,在使用时才会创建对象

(2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能。加载配置文件时就会创建对象

2.Bean管理xml方式

*什么是Bean管理:指的是两个操作,Spring创建对象和Spring注入属性。

*Bean管理操作有两种方式:基于xml配置文件方式和基于注解方式

2.1创建对象和set注入属性

在spring配置文件中使用bean标签,标签里面添加对应的属性

bean标签常用的属性:id属性表示给对象取一个别名,是唯一标识;class属性表示类的全路径;name属性效果和id属性相同,但name属性中可以使用特殊符号,id属性不能使用特殊符号

创建对象时默认执行无参的构造方法

使用set方法注入属性:

2.2有参构造注入属性

2.3p名称空间注入

第一步:在配置文件中添加p名称空间

第二步:在bean标签里注入属性

2.4注入空值和特殊符号

以Book类为例,在Book类中添加一个address属性,然后注入空值

以Book类为例,在Book类中添加一个address属性,然后注入带有特殊符号的值

2.5注入外部bean

创建两个类service和dao,在service中调用dao,在spring配置文件中进行配置

2.6注入内部bean

创建两个类,部门类Dept和员工类Emp

在spring配置文件中进行配置

2.7注入集合类型属性

注入数组类型属性;注入List集合类型属性;注入Map集合类型属性;注入Set集合类型属性

在集合里面设置对象类型值

创建一个课程类Course,作为Stu的一个属性

把集合注入部分提取出来

第一步:在spring配置文件中引入空间名称util

第二步:使用util标签完成list集合注入提取

2.8自动装配

根据指定装配规则(属性名称或者属性类型),spring自动将匹配的属性值进行注入

Bean标签属性autowire配置自动装配,autowire属性的两个值:

a.byName根据属性名注入,注入值bean的id值和类属性名称一样

b.byType根据属性类型注入

2.9外部属性文件

a.直接配置数据库信息

第一步:引入德鲁伊连接池依赖

第二步:在配置文件中直接配置连接池

b.引入外部属性文件配置数据库连接池

第一步:引入德鲁伊连接池依赖

第二步:创建外部属性文件,properties格式,写数据库信息

第三步:把外部properties属性文件引入到spring配置文件中,引入contest名称空间

3.Bean管理

3.1FactoryBean

Spring有两种类型的bean,一种普通bean,一种工厂bean(FactoryBean)

普通Bean:在配置文件中定义bean类型就是返回类型

工厂Bean:在配置文件中定义bean类型可以和返回的类型不一样

第一步创建类,让这个类作为工厂bean,实现接口FactoryBean;第二步实现接口里面的方法,在实现的方法中定义返回的bean类型

3.2bean的作用域

在spring里设置创建bean实例是单实例还是多实例

默认情况下是单实例对象:

设置多实例:在spring配置文件的bean标签里有属性scope,将该属性设置为prototype即设置为多实例

3.3bean的生命周期

生命周期:从对象创建到对象销毁的过程

Bean的生命周期:

  1. 通过构造器创建bean实例(无参数构造)

  1. 为bean的属性设置值和对其他bean的引用(调用set方法)

  1. 调用bean的初始化方法(需要进行配置初始化的方法)

  1. bean可以使用了(对象获取到了)

  1. 当关闭容器时,调用bean的销毁方法(需要进行配置销毁的方法)

演示bean的生命周期(5步):

Bean的后置处理器(生命周期的另外两步),在第三步之前和第三步之后:

  1. 通过构造器创建bean实例(无参数构造)

  1. 为bean的属性设置值和对其他bean的引用(调用set方法)

  1. 把bean实例传递bean后置处理器的方法postProcessBeforeInitialization

  1. 调用bean的初始化方法(需要进行配置初始化的方法)

  1. 把bean实例传递bean后置处理器的方法postProcessAfterInitialization

  1. bean可以使用了(对象获取到了)

  1. 当关闭容器时,调用bean的销毁方法(需要进行配置销毁的方法)

演示bean的生命周期(7步):首先创建类,实现接口BeanPostProcessor,重写接口中的方法,然后在配置文件中配置后置处理器

4.Bean管理注解方式

*什么是注解:注解是代码特殊标记,格式:@注解名称(属性名称1=属性值1,属性名称2=属性值2,…),注解可以作用在类、方法、属性上

*使用注解的目的:简化xml配置

*spring针对bean管理中创建对象提供注解:@Component、@Service、@Controller、@Repository,这四个注解功能是一样的,都可以用来创建bean实例

4.1创建对象

第一步:引入依赖

第二步:开启组件扫描,在配置文件中引入context名称空间

第三步:创建类,在类上面添加创建对象注解

如果不想对包中的所有类进行扫描,将扫描具体到某个类,进行以下配置:

4.2注入属性

@Autowired:根据属性类型进行自动装配,例如在service类里注入dao对象,首先在两个类上都添加注解,其次在service类的dao属性上添加@Autowired注解(不需要添加set方法)

@Qualifier:根据属性名称进行注入,需要和@Autowired一起使用

@Resource:既可以根据类型注入,也可以根据名称注入

@Value:注入普通类型属性

4.3完全注解开发

第一步:创建配置类,替代xml配置文件

第二步:测试类

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

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

相关文章

【网络安全】WiFi密码爆破教程

WiFi密码爆破教程前言一、什么是暴力破解?二、准备破解工具1.VMware Pro 16 虚拟机安装2. VMware安装Kali Linux3. kali监听无限网卡三、WiFi密码暴力破解1. 虚拟机连接USB网卡2. 扫描附近WiFi3. 查看目标WiFi连接设备4. 抓包5. 破解前言 暴力破解攻击是指攻击者通…

代码随想录算法训练营第15天 102. 二叉树的层序遍历、226. 翻转二叉树

代码随想录算法训练营第15天| 102. 二叉树的层序遍历、226. 翻转二叉树 二叉树的层序遍历 学会二叉树的层序遍历,可以一口气打完以下十题: 102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515…

4-3指令系统-CISC和RISC

文章目录一.复杂指令系统计算机CISC二.精简指令系统计算机RISC三.CISC和RISC比较一.复杂指令系统计算机CISC 为增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化,这类机器成为复杂指令系统计算机CISC(Complex Instruction Set Co…

Linux下的FTP服务器

目录 总体功能 功能1----------------查看服务器端的文件列表信息 功能2 ---------------从服务器段下载文件到客户端 功能3 ---------------向服务器端上传文件 功能4----------------客户端退出,服务器继续等待链接 总体功能 功能1----------------查看服务器…

STM32 SPI读写速度评估

目的:测试STM32H7 系列芯片的SPI读写速度。 测试环境:使用STM32H743, 逻辑分析仪, cubeIDE; 测试方法:使用了3种方法:软件IO模拟SPI, 软件控制CSMCU的SPI模块,完全使用SPI模块&…

Android 深入系统完全讲解(30)

下图是生命周期的说明图:如图可以看到: 当创建编解码器的时候处于未初始化状态。首先你需要调用 configure(…)方法让它处于 Configured 状态,然后调用 start()方法让其处于 Executing 状态。在 Executing 状态下,你就 可以使用…

LCHub:全新华为云Astro低代码平台,重塑企业数字化转型

为什么技术创新与业务突破难以挂钩?为什么寻求的卓越成果总难以实现?华为云Astro呈上解决之道,抓住重点一招致胜,让人人皆可高效开发,使创新按照你的步调进行。 华为云Astro低代码平台,重塑企业数字化转型 当企业倍受数字化升级困扰时,若仍延用传统编码开发,则会阻碍整…

Bootstrap4 之栅格系统

Bootstrap4 之栅格系统参考描述栅格系统(网格系统)原理容器.container 与视口宽度行列样式栅格等级网格宽度特点左对齐另起一行自适应布局对齐垂直对齐行列水平对齐排列响应式优先级偏移显隐参考 项目描述Bootstrap 入门经典珍妮弗、凯瑞恩Bootstrap 基…

内存屏障由来的理解和使用《编程高手必学的内存知识》学习笔记 Day 5

系列文章目录 这是本周期内系列打卡文章的所有文章的目录 《Go 并发数据结构和算法实践》学习笔记 Day 1《Go 并发数据结构和算法实践》学习笔记 Day 2《说透芯片》学习笔记 Day 3《深入浅出计算机组成原理》学习笔记 Day 4 文章目录系列文章目录前言一、概念理解(…

JUC面试(六)——Java锁

Java锁 公平锁和非公平锁 概念 公平锁 是指多个线程按照申请锁的顺序来获取锁,类似于排队买饭,先来后到,先来先服务,就是公平的,也就是队列 非公平锁 是指多个线程获取锁的顺序,并不是按照申请锁的顺…

steam搬砖项目,每天1-2小时,月入1w+(内附教学资料)

steam搬砖就非常合适,最大的优点,操作性简单,0门槛也不用担心,一台电脑就能搞定。利用空余时间完成就可以 话不多说,先上目录,以便大家阅读~ 一.steam搬砖玩法 1、steam搬砖项目介绍 2、项目原理与产出…

ROS2机器人编程简述humble-第二章-Parameters .3.4

ROS2机器人编程简述humble-第二章-Launchers .3.3机器人程序通常需要配置各类参数,官网和一些书中都有介绍。概述ROS中的参数与各个节点相关。参数用于在启动时(以及运行时)配置节点,而无需更改代码。参数的生存期与节点的生存期相…

【区块链】深入剖析免费赚钱app的本质

你对免费赚钱软件好奇吗?前言一、揭开“免费赚钱app”神秘面纱1.常见的赚钱app2.app真的在做慈善吗?3.羊毛党的价值4.真正的游戏规则二、区块链1.哈希算法2.互联网挖矿三、深入探讨“区块链”的套路1.免费赚钱app真正的价值2.虚拟货币的本质3.虚拟货币泡…

Java设计模式-观察者模式/观察者模式适合那些场景?怎么使用

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 6.7 观察者模式 6.7.1 定义 又称发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象主体对象在状态变化…

[前端笔记——CSS] 9.CSS处理文件的标准流程+DOM

[前端笔记——CSS] 9.CSS处理文件的标准流程DOM1.CSS处理文件的标准流程2.关于DOM2.1 举个例子2.2 应用 CSS 到 DOM1.CSS处理文件的标准流程 当浏览器展示一个文件的时候,它必须兼顾文件的内容和文件的样式信息,CSS处理文件的标准流程如下: …

06_FreeRTOS临界区代码保护

目录 临界段代码保护简介 临界段代码保护函数介绍 任务级临界区函数详解 中断级临界区函数详解 临界段代码保护简介 什么是临界段:临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段 适用场合如: 1.外设:需严格按照时序初始化的外设:IIC、SPI等等 2.系统…

国家发明专利:基于改进型黏菌优化算法的业务资源分配方法

国家发明专利:基于改进型黏菌优化算法的业务资源分配方法 摘要 本发明公开了一种基于改进型黏菌优化算法的业务资源分配方法,其步骤包括:1将生产任务分成若干个环节,构建有向环状分配网络;2构建工厂参数矩阵并归一化&…

力扣98.验证二叉搜索树

文章目录力扣98.验证二叉搜索树题目描述算法思路代码实现力扣98.验证二叉搜索树 题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 …

领域驱动设计(DDD)的几种典型架构介绍

我们生活中都听说了DDD,也了解了DDD,那么怎么将一个新项目从头开始按照DDD的过程进行划分与架构设计呢? 一、专业术语 各种服务 IAAS:基础设施服务,Infrastructure-as-a-service PAAS:平台服务&#xff0c…

【Java寒假打卡】JavaWeb-Servlet基础

【Java寒假打卡】JavaWeb-Servlet基础介绍servlet快速入门servlet的执行过程servlet关系视图Servlet实现方式-继承HTTPSERVLETServlet的生命周期线程安全问题servlet的映射方式案例-多路径映射问题-指定名称的方式Servlet的创建时机默认Servlet介绍 servlet是运行在Java服务器…