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扩展包需要额外引入

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

世优科技AI数字人多模态交互系统“世优波塔”正式发布

2024年6月6日&#xff0c;世优科技“波塔发布会”在北京举办&#xff0c;本次发布会上&#xff0c;世优科技以全新的“波塔”产品诠释了更高效、更智能、更全面的AI数字人产品及软硬件全场景解决方案&#xff0c;实现了世优品牌、产品和价值的全面跃迁。来自行业协会、数字产业…

大众点评全国丽人POI采集225万家-2024年5月底

大众点评全国丽人POI采集225万家-2024年5月底 店铺POI点位示例&#xff1a; 店铺id Hav6zIYtzhyyopIZ 店铺名称 防屏蔽 十分制服务评分 8.9 十分制环境评分 8.9 十分制划算评分 8.9 人均价格 210 评价数量 19935 店铺地址 建北一支路观音桥步行街红鼎国际A座9-9 店铺…

英伟达GPU对比分析:A100、A800、H100与H800

在当今技术迅速发展的时代&#xff0c;英伟达的GPU产品线提供了多种高性能选项&#xff0c;以满足不同类型的工作负载需求。本文将对英伟达的四种GPU型号——A100、A800、H100和H800进行深入对比分析&#xff0c;探讨它们在性能、架构、应用场景等方面的差异&#xff0c;以帮助…

LIN 入门(1)

1、概述 LIN 是什么 LIN 是 Local Interconnect Network 的缩写&#xff0c;是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter / Serial Communication Interface&#xff0c;通用异步收发器/串行通信接口)的低成本串行通信协议。可用于汽车、家电、办 公设备等…

代码随想录-二叉树 | 111 二叉树的最小深度

代码随想录-二叉树 | 111 二叉树的最小深度 LeetCode 111 二叉树的最小深度解题思路代码难点总结 LeetCode 111 二叉树的最小深度 题目链接 代码随想录 题目描述 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…

讯飞星火模型-语音转文字实现

目录 项目结构 准备音频 接口Demo 准备代码&#xff08;完整修改后&#xff09; 测试提取中文文字代码 结果 下载链接&#xff1a; 这是上周打算试试&#xff0c;提取视频文字之后&#xff0c;制作视频字幕&#xff0c;从而想用大模型来实现&#xff0c;基本的demo可以在…

图像的混合与渐进变换

1.实验目的 平常我们看到的美图秀秀等两个图片混合是怎么生成的呢&#xff0c;今天我们看看图像处理关于这部分怎么做的&#xff1f; 2.实验条件 pycharm python编译器 3.实验代码 # File: 图像混合与渐进变换.py # Author: chen_song # Time: 2024/6/11 下午6:08 "…

CorelDRAW® Graphics Suite 全新 2024 专业图形设计软件

CorelDRAW Graphics Suite 是配备齐全的专业设计工具包&#xff0c;可以非常高的效率提供令人惊艳的矢量插图、布局、照片编辑和排版项目。价格实惠的订阅获得令人难以置信的持续价值&#xff0c;即时、有保障地获得独家的新功能和内容、一流的性能&#xff0c;以及对最新技术的…

【C语音 || 数据结构】二叉树--堆

文章目录 前言堆1.1 二叉树的概念1.2 满二叉树和完美二叉树1.3 堆的概念1.4 堆的性质1.4 堆的实现1.4.1堆的向上调整算法1.4.1堆的向下调整算法1.4.1堆的接口实现1.4.1.1堆的初始化1.4.1.2堆的销毁1.4.1.3堆的插入1.4.1.4堆的删除1.4.1.4堆的判空1.4.1.4 获取堆的数据个数 前言…

轻松玩转新商业模式:工会排队!

在当今数字化时代&#xff0c;互联网的蓬勃发展不仅重塑了商业模式&#xff0c;也深刻改变了消费者的购物习惯。传统的实体零售店面与在线销售平台正面临着巨大的市场挑战。然而&#xff0c;正是这些变革为品牌提供了新的发展机遇。通过创新的商业模式和有效的私域流量管理&…

弱监督语义/实例/全景分割综述2022

摘要 我们从一个统一的角度总结了现有的高效标签图像分割方法&#xff0c;讨论了一个重要的问题:如何弥合弱监督和密集预测之间的差距——目前的方法大多是基于启发式先验&#xff0c;如跨像素相似性、跨标签约束、跨视图一致性和跨图像关系。最后&#xff0c;对标签高效深度图…

纷享销客海外合规观点与方案:个人隐私数据保护与数据出入境

出海&#xff0c;已不再是企业的“备胎”&#xff0c;而是必须面对的“大考”&#xff01;在这个全球化的大潮中&#xff0c;有的企业乘风破浪&#xff0c;勇攀高峰&#xff0c;也有的企业在异国他乡遭遇了“水土不服”。 面对“要么出海&#xff0c;要么出局”的抉择&#xf…

大功率回馈式负载:行业竞争态势

随着科技的不断发展&#xff0c;大功率回馈式负载在各个行业中的应用越来越广泛。大功率回馈式负载是一种能够将电能回馈到电网的设备&#xff0c;具有节能、环保、高效等优点。然而&#xff0c;随着市场竞争的加剧&#xff0c;大功率回馈式负载行业也面临着诸多挑战。 首先&am…

同城信息房产出租小程序源码系统 完全开源可二次开发 带完整的安装代码包以及搭建教程

系统概述 在数字化转型的浪潮中&#xff0c;房产租赁市场也迎来了新的发展机遇。随着移动互联网的普及&#xff0c;越来越多的用户倾向于通过手机应用或小程序来寻找合适的租房信息。为了满足这一需求&#xff0c;小编给大家分享一款“同城信息房产出租小程序源码系统”&#…

低价和低俗

无底线的低价可不就是低俗了吗&#xff1f; O(∩_∩)O哈哈~ AI说的(引导他说的) 以下几个角度可以进行论证: 低价竞争可能导致质量下降:为了达到极低的价格,商家可能会降低产品或服务的质量标准,使用劣质材料或减少投入。这样可能会影响产品的功能、安全性和使用体验,给消费…

智能合约漏洞类型

Are We There Yet? Unraveling the State-of-the-Art Smart Contract Fuzzers | Proceedings of the IEEE/ACM 46th International Conference on Software Engineering

MySQL-连接查询

049-内连接之等值连接 案例&#xff1a;查询每个员工所在的部门名称&#xff0c;要求显示员工名、部门名。 select e.ename, d.dname from emp e inner join dept d on e.deptnod.deptno;注意&#xff1a;inner可以省略 select e.ename, d.dname from emp e join dept d on…

docker registry-harbor私有镜像仓库安装

本博文将引导您安装和配置Harbor私有镜像仓库。安装前&#xff0c;请确保您已安装Docker和Docker Compose。 前置环境 需要安装docker和docker-compose 下载Harbor Harbor的最新版本可以从GitHub下载。这里以2.9.4版本为例&#xff1a; 下载地址&#xff1a;https://github…

大模型学习之GLM结构

探索GLM&#xff1a;一种新型的通用语言模型预训练方法 随着人工智能技术的不断进步&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域也迎来了革命性的发展。OpenAI的ChatGPT及其后续产品在全球范围内引起了广泛关注&#xff0c;展示了大型语言模型&#xff08;LLM&a…

服务器配置(初始化)

一&#xff1a;什么是云服务器及用途&#xff1a; 云服务器(Elastic Compute Service, ECS)是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其管理方式比物理服务器更简单高效。用户无需提前购买硬件&#xff0c;即可迅速创建或释放任意多台云服务器。 我个人感觉就…