SpringIOC 容器

news/2024/9/20 3:01:07/文章来源:https://www.cnblogs.com/wztblogs/p/18303880

SpringIOC 容器

一、组件的概念

什么是组件?

常规的三层架构处理请求流程:

img

划分为组件后:

image1

组件就是所有可以重用的java对象,组件一定是对象,对象不一定是组件

 

二、Spring 进行组件管理

Spring框架替代了程序员原有的new对象和对象属性赋值的动作

  • 组件对象实例化

  • 组件属性赋值

  • 组件对象之间引用

  • 组件对象存活周期管理

我们只需要写配置文件,告诉Spring哪些组件需要它管理,以及他们之间的引用关系

优势:

  • 降低组件之间的耦合性,之前需要在类中去 new 另一个类,是强耦合,使用 SpringIOC 容器通过依赖注入机制,让这两个类的依赖关系减弱,降低耦合性

  • 提高代码可重用性和可维护性

  • 方便配置和管理

  • 交给Spring管理的对象,方可享受Spring框架的其他功能

 

三、SpringIOC 容器

普通容器:只能用来存储,没有其他功能。比如数组、集合等

复杂容器:不仅能存放,还能对内部的数据进行管理,程序中就像 Servlet容器就是复杂容器,创建对象,使用对象,销毁对象。

SpringIOC就是一个复杂容器,不仅可以存储组件,还从内部维护组件的生命周期,从创建到销毁的回调,还能在IOC容器内进行组件功能的扩展,加上事务等。

SpringIOC容器负责实例化、配置和组装bean,通过配置文件的形式获取这些指令。配置文件有三种形式:XML、Java注解、Java代码

SpringIOC容器具体接口和实现类

接口:

BeanFactory 只是规定了一些基本的方法:如何创建存储组件,如何对外 提供组件

ApplicationContext 是 BeanFactory 的子接口,它进行了一些扩展:

  • AOP

  • 消息资源处理(用于国际化)

  • web项目的支持

实现类:

ApplicationContext的实现类

  • ClassPathXmlApplicationContext

    • 配置文件是 xml 格式

    • 放在项目的类路径下(resource或src下)

  • FileSystemXmlApplicationContext

    • 配置文件是xml

    • 放在非项目路径下

  • WebApplicationContext

    • web项目对应的ioc容器

  • AnnotationConfigApplicationContext

    • 配置文件使用的是 java类

 

配置方式有三种:XML、注解、Java类

目前使用较多的是 java类 + 注解

 

控制反转(IOC)

当应用程序需要一个对象时,不再是应用程序直接创建对象,而是由IOC容器来创建和管理,控制权由应用程序转移到IOC容器中,也就是反转了 控制权

 

依赖注入(DI)

DI是指在组件之间传递依赖关系的过程中,将依赖关系在容器内部进行处理,这样就不必在应用程序中硬编码对象之间的依赖关系,实现了对象之间的解耦合。也就是之前 把一个对象赋值给另一个对象的操作在IOC容器中进行

 

IOC和DI 的实现步骤

  1. 写配置文件

  2. 实例化 IOC 容器

  3. 获取 Bean(组件)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javap和字节码

javap字节码的基本信息public class Test {private int age = 10;public int getAge() {return age;} }在 class 文件的同级目录下输入命令 javap -v -p Test.class 来查看一下输出的内容// 字节码文件的位置 Classfile /D:/Code/code/JavaCode/JavaSourceLearn/out/production…

Prometheus之钉钉

要实现Prometheus通过Alertmanager发送告警到钉钉,您可以按照以下步骤进行配置:创建钉钉机器人:首先,您需要在钉钉群中添加一个自定义机器人,并获取机器人的Webhook地址。创建机器人时,您可以设置安全验证方式,如加签。创建完成后,保存好Webhook地址和加签后的秘钥(如…

Java——N以内累加求和

2024/07/15 1.题目 2.错误 3.分析 4.答案 1.题目2.错误 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();int sum = 0;while (N<=1000) {for (int i=1;i<=N;…

SQLCoder部署和应用

SQLCoder文生SQL部署和应用主页个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/SQLCoder简介 SQLCoder是一个用于生成SQL语句的工具,可以通过输入自然语言描述的需求,生成对应的SQL语句。SQLCoder支持连接数据库,对生成的SQL语句可…

NOIP 十三连测 #2 补题

逆天输出文件 .ans reverse 水题,随便自己造两组数据都能看出规律: \[\begin{cases}a_n a_{n - 2} \dots a_1 + a_2 a_4 \dots a_{n - 1}(n \mod 2 = 1) \\ a_n a_{n - 2} \dots a_2 + a_1 a_3 \dots a_{n - 1 } (n \mod 2 = 0)\end{cases} \]logistics 先求出最小生成树的 \…

MySQL时间戳转成日期格式

将时间戳转换为日期格式:-- 如果时间戳为毫秒级长度为13位,需要先除以1000 SELECT id, `task_name` ,FROM_UNIXTIME(`task_register_begin_time`/1000,%Y-%m-%d %H:%i:%s) as task_register_begin_time,FROM_UNIXTIME(`task_register_end_time`/1000,%Y-%m-%d %H:%i:%s) as t…

使用GSAP制作动画视频

GSAP 3Blue1Brown给我留下了深刻印象。利用动画制作视频,内容简洁,演示清晰。前两天刚好碰到一件事,我就顺便学习了一下怎么用代码做动画。 以javascrip为例,有两个动画引擎,GSAP和Animajs。由于网速的原因,询问了GPT后,我选择了GSAP来制作我的第一个动画视频。 制作动画…

log4cpp的安装及使用

介绍开源库log4cpp的安装及使用目录前言安装使用示例代码配置文件编译链接输出 前言 本文的操作均在ubuntu20.04下进行 安装 本文仅介绍从源码编译安装log4cpp的过程。 ①在开始编译前,首先要确保系统中安装了g++,make,autoconf和libtool ②下载log4cpp源码 下载log4cpp的特…

Intellij springboot远程调试

服务器端配置: java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5005 XXXX.jar 说明: address:IP:端口;*代表所有IP地址都可访问,5005需要可IDEA远程请求的端口一致 XXXX.jar:你的springboot程序 IDEA端配置:

采购订单列表根据多条件设置单元格背景色

bos配置: 如果值存在空字符串和空格,空格会标红,为空不会。因此单独针对空字符串标红。 测试效果:

面试准备【LLM】

目录其他注意力过拟合的表现有哪些?BN 训练和测试的区别在哪里?梯度下降的公式?反向传播优化器 & Adam均方误差损失交叉熵损失梯度消失问题梯度爆炸问题权重正则化过拟合分词器BERT掩码语言建模 (MLM)下一个句子预测 Next Sentence Prediction(NSP)BERT微调BERT模型创新…

帝国CMS网站为什么发布时间比实际时间相差8个小时?

你的php设置的时间有问题,是美国的时间。有以下两种方法可解决:1、修改php.ini,找到:date.timezone,把前面的分号去掉,并把值设为PRC2、修改e/class/config.php文件,把://@date_default_timezone_set("PRC");前面的//去掉即可本文来自博客园,作者:黄文Rex,…