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

Spring中IOC容器

IoC


IOC容器

IoC是一种设计思想,面向对象编程

Spring通过IoC管理所有Java对象的实例化和初始化,控制对象之间依赖关系

将IoC容器管理的Java对象称为Spring Bean,与new创建的对象没有区别

控制反转(IoC Inversion of Controle)

指将对象的创建权力交给第三方容器负责

依赖注入(DI Dependency Injction)

Spring创建对象过程中,将对象依赖属性通过配置进行注入

DI是IoC思想的具体实现

IoC容器在Spring的实现

IoC容器是IoC思想的产品实现

IoC容器管理组件 -》 Spring的bean或对象

Spring提供的IoC容器实现方法:

BeanFactory

Spring内部接口,不提供给开发人员使用

ApplicationContext

BeanFactory子接口,更多高级特性,面向使用者

ApplicationContext主要实现类:

ClassPathXmlApplicationContext:

读取类路径XML配置文件创建IoC容器对象

FileSystemXmlApplicationContext:

读取系统路径XML配置文件创建IoC容器对象


基于XML管理Bean

ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");

id属性是bean的唯一标识

HelloWorld bean = (HelloWorld)ac.getBean(“id”);

HelloWorld bean = (HelloWorld)ac.getBean(“id”);

还可以根据获取(该类在XML中只能有一个)

不用强制转换成目标类

HelloWorld bean = ac.getBean(HelloWorld.class) ;    

还可以标识和类都使用

HelloWorld bean = ac.getBean(HelloWorld.class,”id”) ;

使用setter注入依赖

创建类,在类中创建变量

变量创建set和get方法(或只产生set方法)

这样就可在Spring的xml中注入变量值

为不同对象类型属性赋值

使用外部bean

将XML中其他bean的id填入ref属性中

使用内部bean

在一对property之间创建bean

为数组类型属性赋值

为集合类型属性赋值

private List<> students;

为Map集合类型属性赋值


单实例bean

默认将bean实例化获得的对象是一样的

ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");Hello hello1 = ac.getBean("hello");Hello hello2 = ac.getBean("hello");

hello1和hello2是同一个对象,

但是可以修改为多实例的对象

添加scope属性,其中singleton默认单实例,prototype是多实例


引入外部属性文件

在resources目录中常见properties类型文件

在文件中写入数据(name=value)

在Spring config的beans.xml中引入外部属性文件

最后,可以在beans中使用属性文件中的属性(${name})


基于注解管理Bean

Spring默认不使用注解

spring config中通过<context:component-scan> 元素开启 Spring Beans的自动扫描功能

自动扫描指定的包及其子类

若某类使用类@Component注解,就将该类装配到容器中来创建bean

@Component:

标识Spring中的Bean,可以应用在任何层次。

@Repository:

标识Bean,用于数据访问层(Dao层),负责与数据库进行交互

@Service:

标识Bean,用于业务层(Service层),调用数据访问层的方法来获取或修改数据

@Controller:

标识Bean,用于控制层(Controller层),处理用户的请求并响应

控制层 -> 业务逻辑层 -> 数据访问层。

开启自动扫描org.example包的类

使用Component注解来标识类

在注解中配置value属性或直接写值,作为该bean的id

bean对象实例化调用无参数构造方法,这里无参数构造方法直接赋值变量

最后在测试类中获取bean并执行


AutoWired注解自动注入

将bean自动注入到对应的类中

只在有注解管理的类中才能只用

省去了bean中配置对象类型<property>的过程

默认根据类型装配(byType),所以AutoWired注解不需要指定名字

创建注解管理的Hello类

创建注解管理的name类

使用Autowired注解注入Hello类

还可以将注解写在setter方法上

还可以将注解写在name的构造方法上

来注入Hello类

配合@Qualifier,让@Autowired根据名称注入

若同一类有多个bean时使用


Resource注解属性注入

和Autowired目的一样

但是Resource注解是根据名字注入的(byName)

若没有名字再byType寻找bean注入

@Resource是JDK扩展包的一部分,@AutoWired是Spring的一部分。

JDK扩展包需要额外引入

相关文章:

Spring中IOC容器

IoC IOC容器 IoC是一种设计思想&#xff0c;面向对象编程 Spring通过IoC管理所有Java对象的实例化和初始化&#xff0c;控制对象之间依赖关系 将IoC容器管理的Java对象称为Spring Bean&#xff0c;与new创建的对象没有区别 控制反转&#xff08;IoC Inversion of Controle&a…...

php redis分布式锁

一&#xff0c;概念 在PHP中实现分布式锁通常可以使用数据库、缓存系统&#xff08;如Redis&#xff09;或者其他中央存储系统来保证在分布式系统中的数据一致性与同步。秒杀下单、抢红包等等业务场景&#xff0c;都需要用到分布式锁。 常规方案大概有七中 方案一&#xff1a;…...

kotlin 中的布尔

1、kotlin中内置的Boolean类型&#xff0c;可以有true与false两个值的布尔对象。 布尔值的内置运算有&#xff08;跟很多语言如java、js一摸一样&#xff09;&#xff1a; ||——逻辑或&&——逻辑与!——逻辑非 fun main() {val a: Boolean trueval b: Boolean fa…...

有哪些ai聊天推荐?简单分享三款

有哪些ai聊天推荐&#xff1f;在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;聊天软件已经成为我们日常生活中不可或缺的一部分。无论是与朋友、家人还是同事交流&#xff0c;这些智能聊天软件都能为我们提供极大的便利。那么&#xff0c;市面上有哪些值得推…...

Python第二语言(十、Python面向对象(上))

目录 1. 标记变量的基础类型 2. 初识对象 2.1 使用对象组织数据 3. 成员变量 3.1 类和类成员的定义 3.2 成员变量和成员方法使用 3.3 成员方法的定义语句 4. 类和对象class Clock: def ring(self): 4.1 创建类对象的语法&#xff1a;对象名 类名称() 4.2 用生活中的…...

SolidWorks 2016 SP5安装教程

软件介绍 Solidworks软件功能强大&#xff0c;组件繁多。 Solidworks有功能强大、易学易用和技术创新三大特点&#xff0c;这使得SolidWorks 成为领先的、主流的三维CAD解决方案。 SolidWorks 能够提供不同的设计方案、减少设计过程中的错误以及提高产品质量。SolidWorks 不仅…...

为什么高考志愿只选计算机专业?

刚刚高考结束&#xff0c;不知道各位学弟学妹考的怎么样啊&#xff1f; 高考毕竟是对十二年寒窗苦读的评判&#xff0c;也是很多人改变命运的机会。很多同学每天等待出分的过程很煎熬&#xff0c;既吃不好也玩不好&#xff08;os&#xff1a;这种同学还挺多的&#xff09;。 但…...

GPT大模型微调-提高垂直领域回答质量

微调一个大模型并测试微调后的效果是一个很好的学习实践。下面是一个逐步指导,帮助你使用一个较小的预训练大模型进行微调,并测试其效果。我们将使用 Hugging Face 的 Transformers 库和一个较小的预训练模型,如 DistilBERT。这个库非常流行且易于使用。 实现步骤 步骤 1:…...

全网首发-Docker被封后的代理设置教程

最近上交、科大以及阿里的一些docker镜像&#xff0c;好像都因为不可控力导致无法访问。 所以&#xff0c;之前好多正常的一些镜像的打包都会报错&#xff1a; 比如&#xff1a; #1 [internall load build definition from Dockerfile#1transferring dockerfile:972B done#1 D…...

代码随想录算法训练营第五十七天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列

代码随想录算法训练营第五十七天 1143.最长公共子序列 题目链接&#xff1a;1143.最长公共子序列 确定dp数组以及下标的含义&#xff1a;dp[i][j] &#xff1a;以下标i - 1为结尾的text1&#xff0c;和以下标j - 1为结尾的text2&#xff0c;最长重复子数组长度为dp[i][j]确…...

RocketMQ事务性消息

RocketMQ事务性消息是一定能保证消息发送成功的 事务消息发送步骤&#xff1a; &#xff08;1&#xff09;发送方将半事务消息发送至RocketMQ服务端。 &#xff08;2&#xff09;RocketMQ服务端将消息持久化之后&#xff0c;向发送方返回ack确认消息已经发送成功。由于消息为…...

mysql (事物)

一.什么是事物 事物是一组操作的集合&#xff0c;不可分割的工作单位&#xff0c;事物会把所有的操作当作一个整体一起向系统提交或撤销操作请求&#xff0c;就是这些操作要么一起成功要么一起失败。 二.事物操作 &#xff08;这个就是一个理解&#xff09; 1.事务特性 原子性…...

kotlin 中的字符串

一、字符类访问 1、字符串的访问跟js一样&#xff0c;可以使用索引来访问或者直接循环。 fun main() {val a: String "2024"// 方式一&#xff1a;for (item in a) {println(item) // 输出每一个字符}// 方式二&#xff1a;println("${a[0]}, ${a[1]}, ${a[2…...

网站线上模板建设的优缺点

优点&#xff1a; 1.搭建的时间短&#xff0c;在线建站&#xff0c;只需要登录注册然后选择网站模板创建网站即可管理自己的网站后台&#xff0c;就几步操作就可以实现。 2.网站出错率少&#xff0c;因为有很多用户在使用&#xff0c;前期所报出来的问题就已经一一…...

哲学家进餐问题

1.最多允许四个哲学家同时进餐&#xff0c;保证有一个筷子是空闲的&#xff0c;从而保证能有有一个哲学家成功进餐&#xff0c;而不导致死锁 semaphore chopstick[5] {1, 1, 1, 1, 1}, mutex4; Pi(){do{think...P(mutex);P(chopstick[i]);P(chopstick[(i1)%5);eat...V(mutex)…...

无人机遥感在农林信息提取中的实现方法与GIS融合应用

在新一轮互联网信息技术大发展的现今&#xff0c;无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节&#xff0c;逐步摆脱人力依赖&#xff1b;在施肥灌溉环节构建智慧节能系统&a…...

联想测开一面(电话面试)笔试60%

联想测开一面&#xff08;电话面试&#xff09;笔试60% 3.21 无自我介绍 基本问项目&#xff0c;问实习 对python自动化测试了解多少 讲一下python中打包和解包的概念 学校无测试相关课程&#xff0c;平时用什么平台去学习的 计算机底层实现原理简要说说&#xff08;软硬结合&…...

【python】tkinter GUI开发: Button和Entry的应用实战探索

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

sm2证书生成(openssl3.0)

1、下载安装包 https://www.openssl.org/source/openssl-3.0.14.tar.gz 2、解压到指定位置 /appserver/openssl-3.0.14 3、安装依赖包 yum -y install gcc perl make zlib-devel perl-CPAN 4、编译 ./config shared --prefix/appserver/SM make depend make make install 5…...

java计算年化利率

接了业务需求需要计算年化利率&#xff0c; 公式定义&#xff1a; IRR计算 在计算 IRR 时&#xff0c;我们希望找到一个折现率r&#xff0c;使得净现值&#xff08;NPV&#xff09;为零。NPV 函数定义如下&#xff1a; NPV ∑ t 0 n C t ( 1 r ) t \text{NPV} \sum_{t0}…...

深入理解ChatGPT工作原理

在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术的飞速发展让机器能够更加自然和人类进行交流。OpenAI的ChatGPT作为当前最受关注的NLP模型之一&#xff0c;其出色的对话能力引起了业界和学术界的广泛关注。本文将深入探讨ChatGPT的工作原理&#xff0…...

在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)

1. 在 Wed 中应用 MyBatis&#xff08;同时使用MVC架构模式&#xff0c;以及ThreadLocal 事务控制&#xff09; 文章目录 1. 在 Wed 中应用 MyBatis&#xff08;同时使用MVC架构模式&#xff0c;以及ThreadLocal 事务控制&#xff09;2. 实现步骤&#xff1a;1. 第一步&#xf…...

Elasticsearch index 设置 false,为什么还可以被检索到?

在 Elasticsearch 中&#xff0c;mapping 定义了索引中的字段类型及其处理方式。 近期有球友提问&#xff0c;为什么设置了 index: false 的字段仍能被检索。 本文将详细探讨这个问题&#xff0c;并引入列式存储的概念&#xff0c;帮助大家更好地理解 Elasticsearch 的存储和查…...

169. 多数元素

题目 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3]输出&#xff1a;3 …...

ADS基础教程19 - 电磁仿真(EM)基本概念和实操

EM介绍 一、引言二、基本概念1.EM介绍2.Momentum介绍3.FEM介绍4.Substrate介绍 三、创建Layout并进行Momentum仿真1.创建Layout2.添加Microtrip&#xff08;微带线&#xff09;3.添加Substrate4.Momentum仿真 四、总结 一、引言 本章节开始介绍EM的基本概念、内容以及实现具体…...

LabVIEW RT环境中因字符串拼接导致的系统崩溃问题

在LabVIEW实时操作系统&#xff08;RT&#xff09;环境中运行的应用程序出现字符串拼接后死机的问题&#xff0c;通常涉及内存管理、内存泄漏或其他资源管理问题。以下是一些指导和步骤&#xff0c;帮助解决这个问题&#xff1a; 1. 内存泄漏检测 字符串拼接会在内存中创建新…...

深层网络:层数多真的更好吗?

深层网络&#xff1a;层数多真的更好吗&#xff1f; 在深度学习的世界里&#xff0c;"深度"始终是一个热门话题。随着技术的发展&#xff0c;我们有了越来越多的方法来构建更深的神经网络&#xff0c;这似乎暗示着“层数越多&#xff0c;效果越好”。然而&#xff0…...

【QT5】<知识点> QT常用知识(更新中)

目录 一、更改文本颜色和格式 二、QT容器类 三、字符串与整数、浮点数之间的转换 四、QString常用功能 五、SpinBox的属性介绍 六、滑动、滚动、进度条和表盘LCD 七、时间、日期、定时器 一、更改文本颜色和格式 动态设置字体粗体&#xff1a;QFont对象的setBold方法动态…...

如何将AndroidStudio和IDEA的包名改为分层级目录

新版UIAndroidStudio 1、点击项目目录右上角如图所示的三个点点。 2、然后依次取消Hide empty middle package &#xff0c;Flatten package的勾选 3、注意&#xff1a;一定要先取消hide的勾选&#xff0c;不然目录不会完全分级&#xff08;做错了可以反过来重新设置&#x…...

北交字节联合提出ClassDiffusion: 使用显式类别引导的一致性个性化生成。

在个性化生成领域, 微调可能会引起过拟合导致模型无法生成与提示词一致的结果。针对这个问题&#xff0c;北交&字节联合提出ClassDiffusion&#xff0c;来提升个性化生成的一致性。 通过两个重要观察及理论分析提出了新的观点:一致性的损失是个性化概念语义偏移导致的, 还…...

佛山做网站哪家公司好/网站模板价格

本质是依赖添加没有成功 1. 解决方案一&#xff1a;修改Maven镜像 在Maven的conf目录下的setting.xml配置阿里云镜像:<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/…...

专题型定制网站建设/免费的app推广平台

对于复合索引&#xff08;多列btree&#xff0c;使用多列值组合而成的btree索引&#xff09;。遵循最左侧原则&#xff0c;从左到右的使用索引中的字段&#xff0c;一个查询可以只使用索引中的一部份&#xff0c;但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a a…...

辽宁做网站和优化/武汉整站优化

哪些错误会记录header PCIe错误产生后&#xff0c;如果对应的错误没有被mask住&#xff0c;并且错误类型又是可以产生header log的错误&#xff0c;那么在AER cap中header log regs中会记录对应的header。 具体哪些错误会记录header log见下面table中介绍 Table 6-2 General P…...

dw网站结构图怎么做/seo黑帽培训

模块式pyth1.on组织代码的基本方式一个python脚本可以单独运行&#xff0c;也可以导入另一个脚本中运行&#xff0c;当脚本被导入运行时&#xff0c;我们将其称为模块(module)所有的点p为文件都可以作为一个模块导入模块名与脚本的文件名相同&#xff0c;例如我们编写了一个名为…...

哈尔滨网站备案手续/网店推广实训报告

我们在用电脑时&#xff0c;电脑开着有时候会短暂的离开下电脑&#xff0c;如上班时&#xff0c;中午时间去吃饭了&#xff0c;电脑上有些东西不想让其他的看到或是操作。可以设置一下安全保护方法。暂时锁定计算机。1.WinL键法在WindowsXP中在任何时候按下WinL(L 是LockStatio…...

wordpress 安装量/全网引流推广 价格

点&#xfeff;&#xfeff;&#xfeff;击上面↑↑↑蓝字订阅【吉利微生活】-----------------------------------★❤表白1:表白20级邓诗玲小姐姐 只因为在人群中多看了你一眼 从此你便刻进我的心里 总在校园里溜达 想要偶遇你 可是却总也等不到你 你可不可以给我个机会 让我…...