控制反转-Inversion Of Control

article/2025/11/6 21:55:27

一、控制反转

控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专业术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。

二、工厂模式解耦

工厂就是负责给我们从容器中获取指定对象的类。这时候我们获取对象的方式发生了改变
原来:我们在获取对象时,都是采用 new 的方式。是主动的。
在这里插入图片描述
现在:我们获取对象时,同时跟工厂要,有工厂为我们查找或者创建对象。是被动的。
在这里插入图片描述
这种被动接收的方式获取对象的思想就是控制反转,它是 spring 框架的核心之
明确 ioc 的作用: 削减计算机程序的耦合(解除我们代码中的依赖关系)。

三、spring 中工厂的类结构图

在这里插入图片描述

四、BeanFactory 和 ApplicationContext 的区别

BeanFactory 和 ApplicationContext 的区别:创建对象的时间点不一样。
ApplicationContext: 只要一读取配置文件,默认情况下就会创建对象。
BeanFactory: 什么时候使用什么时候创建对象。

五、ApplicationContext的三个常用实现类

ClassPathXmlApplicationContext: 它可以加载类路径下的配置文件,要求配置文件必须在类路径下。不在的话,加载不了。
FileSystemXmlApplicationContext: 它可以加载磁盘任意路径下的配置文件(必须有访问权限)
AnnotationConfigApplicationContext: 它是用于读取注解创建容器的

核心容器的两个接口引发出的问题:

ApplicationContext: 单例模式适用 采用此接口
它在构建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说,只要一读完配置文件马上就创建配置文件中配置的对象
BeanFactory: 多例对象适用
它在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。

六、 IOC 中 bean 标签和管理对象细节

1.创建 Bean 的三种方式

第一种方式:使用默认构造函数创建。
在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。
采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。

<bean id="accountService" class="com.wd.service.impl.AccountServiceImpl"></bean>

第二种方式:使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器

<bean id="instanceFactory" class="com.wd.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>

第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器

<bean id="accountService" class="com.wd.factory.StaticFactory" factory-method="getAccountService"></bean>

2.bean对象的作用范围

bean标签的scope属性:
作用:用于指定bean的作用范围
取值: 常用的就是单例和多例
singleton:单例的(默认值)
prototype:多例的
request:作用于web应用的请求范围
session:作用于web应用的会话范围
global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session

3.bean对象的生命周期

单例对象
出生:当容器创建时对象出生
活着:只要容器还在,对象一直活着
死亡:容器销毁,对象消亡
总结:单例对象的生命周期和容器相同
多例对象:
出生:当使用对象时spring框架为我们创建
活着:对象是要是在使用过程中就一直活着
死亡:当对象长时间不用,且没有别的对象引用时,由java的立即回收器回收


http://chatgpt.dhexx.cn/article/eQqRwJ3s.shtml

相关文章

微信小程序hamburgers汉堡包css动画

微信小程序hamburgers汉堡包css动画 源码在我的csdn里下载 https://download.csdn.net/download/ozhy111/12201373

汉堡式折叠html,美味的CSS动画汉堡包:hamburgers_html/css_WEB-ITnose

s if you insist, but they’re not accessible as a menu button. Append the class name of the type of hamburger you’re craving: Here’s the list of hamburger-type classes you can choose from: hamburger--arrowhamburger--arrow-rhamburger--arrowalthamburger--a…

LSB 题解

今天来刷一道Misc的题目&#xff0c;LSB原理进行图片隐写 LSB原理 LSB是一种利用人类视觉的局限性设计的幻术 PNG和BMP图片中的图像像素一般是由RGB(RED红 GREEN绿 BLUE蓝)三原色组成 记住&#xff0c;JPG图片是不适合使用LSB隐写的&#xff0c;JPG图片对像数进行了有损压缩…

LSB利器-zsteg

一、Usage # zsteg -h Usage: zsteg [options] filename.png [param_string] -c, --channels X channels (R/G/B/A) or any combination, comma separated valid values: r,g,b,a,rg,bgr,rgba,r3g2b3,... -l, --limi…

【linux】lsb_release -a命令

查看linux发行版本&#xff1a;lsb_release -a 运行该命令时若提示lsb_release命令不存在 不存在&#xff0c;则表明系统未安装该命令&#xff0c;报错如下&#xff1a; 解决方法&#xff1a; 查看 lsb_release 命令属于哪个软件包&#xff0c;命令为yum provides */lsb_rel…

图片LSB隐写(java)

一、隐写原理 LSB隐写原理就是图片中的像素一般是由三种颜色组成&#xff0c;即三原色(红绿蓝)。由这三种原色可以组成其他各种颜色&#xff0c;在png图片的存储中,每个颜色占有8bit,即有256种颜色&#xff0c;一共包含256的三次方颜色&#xff0c;即16777216中颜色。人类的眼睛…

LSB隐写术

前言 LSB全称为 least significant bit&#xff0c;是最低有效位的意思。Lsb图片隐写是基于lsb算法的一种图片隐写术&#xff0c;以下统称为lsb隐写&#xff0c;这是一种常见的信息隐藏方法。当然关于图像的隐写的方法有很多&#xff0c;统称为隐写术&#xff0c; lsb隐写很实…

Linux开发标准LSB简介:Linux Standard Base

目录 Unix/Linux 标准化历史 POSIX Open Group Austin Group LSB LSB 简介 组织架构 工作组 LSB 的标准化流程 认证 认证问题报告 LSB 的历史、现状和将来 实例&#xff1a;lsb_release 的规范定义和实现 结束语 Unix/Linux 标准化历史 标准化目前已经成为 Linu…

LSB 简介

Unix/Linux 标准化历史 标准化目前已经成为 Linux 系统上的一个热门话题。实际上&#xff0c;在 Linux 诞生之初&#xff0c;这个问题就得到了重视。当 Linus 在开发 0.01 版本的 Linux 内核时&#xff0c;就开始关注 POSIX 标准的发展&#xff0c;他在 /include/unistd.h 文件…

图片隐写之LSB(Least Significant Bit)原理及其代码实现

1. 什么是隐写&#xff1f; 隐写术是一门关于信息隐藏的技巧与科学&#xff0c;所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术的英文叫做Steganography&#xff0c;来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganogra…

MetaPhlAn2:宏基因组物种组成分析

简介 MetaPhlAn2是分析微生物群落(细菌、古菌、真核生物和病毒)组成的工具&#xff0c;它在宏基因组研究中非常有用&#xff0c;只需一条完命令即可获得微生物的物种丰度信息(扩增子物种组成需要质控、拼接、拆样本、切除引物、比对等步骤&#xff0c;此软件居然分析宏基因组这…

你想要的宏基因组-微生物组知识全在这(2023.4)

欢迎点击上方蓝色”宏基因组”关注我们&#xff01; 宏基因组/微生物组是当今世界科研最热门的研究领域之一&#xff0c;为加强宏基因组学技术和成果交流传播&#xff0c;推动全球华人微生物组领域发展&#xff0c;中科院青年科研人员创立“宏基因组”公众号&#xff0c;联合海…

Kraken2:宏基因组快速物种注释神器

简介 kraken是基于k-mer精确比对&#xff0c;并采用最LCA投票结果快速宏基因组DNA序列进行物种注释的软件。 图. Kraken2分类基本原理 该文章于2014年发表于Genome Biology&#xff0c;目前引用过两千次[1]。详见《Kraken&#xff1a;使用精确比对的超快速宏基因组序列分类软件…

Nature综述: 宏基因组关联分析-深入研究微生物组

本文由谢忠杰编译&#xff0c;董小橙、江舜尧编辑&#xff0c;本文较长&#xff0c;建议用电脑阅读。 “微生太”原创微文&#xff0c;转载已获授权。 导读 问题1&#xff1a;哪些疾病与人体微生物明确相关&#xff1f; 问题2&#xff1a;如何研究人体微生物与健康的关系&#…

Nature子刊:HUMAnN2实现宏基因组和宏转录组种水平功能组成分析

HUMAnN2实现宏基因组和宏转录组种水平功能组成分析 Species-level functional profiling of metagenomes and metatranscriptomes Nature Methods, [IF 26.919], Article, 2018-10-30 DOI: http://dx.doi.org/10.1038/s41592-018-0176-y 第一作者&#xff1a;Eric A. Franzosa…

从测序到宏基因组:聚焦菌群生信分析方法最前沿

今天是第2439期日报。 Nature子刊&#xff1a;基于三代测序的宏基因组分析助力完整微生物进化研究 Nature Methods[IF:47.99] ① 基于Pacific Biosciences或Oxford Nanopore的三代测序技术已成为获得闭环微生物基因组的常规手段&#xff0c;即使对特殊大量数据的读取&#xff0…

Protein Cell:扩增子和宏基因组数据分析实用指南

扩增子和宏基因组数据分析实用指南 A practical guide to amplicon and metagenomic analysis of microbiome data Protein Cell [IF: 10.164] DOI: https://doi.org/10.1007/s13238-020-00724-8 Review: 2020-5-11 第一作者&#xff1a;刘永鑫1,2,3, 秦媛1,2,3,4, 陈同5 通讯作…

凌恩生物文献分享|颠覆性的宏基因组新思路,速来get!

非人灵长类动物&#xff08;NHP&#xff09;是人类的近亲&#xff0c;为宿主-微生物互作的研究提供了一个很好的例子。近年来研究主要集中在野生灵长类动物的肠道微生物群&#xff0c;这将有助于了解灵长类及其肠道微生物群的进化&#xff0c;但仍然缺乏关于野生种群肠道微生物…

Nature综述:宏基因组测序研究耐药基因的方法和资源

本文转自红皇后学术&#xff0c;链接 https://mp.weixin.qq.com/s/2QMrq6hwr4mIPSpe_rfXJg 论文信息 论文题目&#xff1a;Sequencing-based methods and resources to study antimicrobial resistance 期刊&#xff1a;Nature Reviews Genetics IF&#xff1a;35.898 发表时间…

Nature综述:鸟枪法宏基因组-从取样到数据分析——2万字带你系统入门宏基因组实验和分析

文章目录 NBT&#xff1a;鸟枪法宏基因组-从取样到数据分析热心肠日报摘要正文图1. 宏基因组分析流程概述附图1. 用于规划宏基因组学研究的示例工作流程附框1. 实验设计中的问题和解决方案鸟枪法宏基因组学研究方案设计样本采集和DNA提取表1. 在测序之前富集微生物细胞和DNA方法…