Spring系统框架

server/2024/11/14 6:55:58/

Spring Framework系统架构

在这里插入图片描述

1.Spring核心概念

代码书写现状

耦合度偏高

解决方案

使用对象时,在程序中不要主动使用new产生对象,转换为外部提供对象

IOC(Inversion of Control)控制反转

对象的创建控制权由程序移到外部,这种思想称为控制反转

解耦

Sping技术对Ioc思想进行了实现

Spring提供了一个容器,称为IOC容器用来充当IOC思想中的“外部”

IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOc容器中同称Bean

DI(Dependency Injection)依赖注入

在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

在这里插入图片描述

目标:充分解藕

使用IOC容器管理bean(IOC )

在ioc容器内将有依赖关系的bean进行关系绑定

最终效果:

使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

IOC入门案例思路分析

  1. 管理什么?(Service与Dao)
  2. 如何被管理的对象告知IOC容器(配置)
  3. 被管理的对象交给IOC容器,如何获取IOC容器?接口
  4. IOC容器得到后,如何从容器中获取bean?(接口方法)
  5. 使用Spring导入那些坐标?(pom.xml)

2.bean的配置

bean基础配置

bean别名配置

bean作用范围配置

在这里插入图片描述
在这里插入图片描述

为什么bean默认为单例?

适合交给容器进行管理的bean

表现层对象

业务层对象

数据层对象

工具对象

不适合交给容器进行管理的bean

封装实体的域对象

3.bean实例化

bean是如何创建的,实例化bean的三种方式

第一种:bean本质上就是对象,创建bean使用构造方法完成

第二种:使用静态工厂

在这里插入图片描述

第三种 实例工厂实例化bean

第四种 使用FactoryBean实例化Bean(第三种方法的变种)

java">Public clas UserDaoFactoryBean implements FactortyBean<UserDao>{public UserDao getObject() throws Exception{return new UserDaoImpl();  //获得bean的实例的}public Class<?>getObjectType(){return UserDao.class;//获得bean 的类型的}public boolean isSingleton(){return false;//true 返回的是单例对象,false返回的不是单例对象}
}

在这里插入图片描述

4.bean的生命周期

生命周期:从创建到消亡的完整过程

bean生命周期Lbean从创建到销毁的整体过程

bean 生命周期控制:在bean创建后到销毁前做一些事情

在这里插入图片描述

在这里插入图片描述

初始化容器

1.创建对象(内存分配)

2.执行构造方法

3.执行属性注入(set操作)

4.执行bean初始化方法

使用bean

1.执行业务操作

关闭/销毁容器

1.执行bean销毁方法

在这里插入图片描述

在这里插入图片描述

5.setter注入(依赖注入)

向一个类中传递数据的方法有几种

普通方法(set)

构造方法

思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或字符串呢?

引用类型

简单类型(基本数据类型与String)

依赖注入方式

setter注入

简单类型

引用类型

构造器注入

简单类型

引用类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

依赖注入方式选择

1.强制依赖使用构造器进行,setter注入有概率不进行注入导致null对象出现

2.可选依赖使用setter注入进行,灵活性强

3.Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式数据初始化,相对严谨

4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖,使用setter注入完成可选依赖的注入

5.实际开u发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入

6.自己开发的模块推荐使用setter注入

6.自动装配

Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配

自动装配方式

按类型(常用)

按名称

按构造方法

不启用自动装配

在这里插入图片描述

自动装配用于引用类型依赖注入,不能对简单类型进行操作

只有按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用

使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用

自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

7.集合注入

在这里插入图片描述

引用类型

在这里插入图片描述

8.核心容器总结‘

BeanFactory是IOC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载

ApplicationContext接口时Spring容器的核心接口,初始化时bean立即加载

ApplicationContext接口时提供基础的bean’操作相关方法,通过其他接口扩展其功能

ApplicationContext接口常用初始化类

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext

在这里插入图片描述

延迟加载

ApplicationContext接口时Spring容器的核心接口,初始化时bean立即加载

ApplicationContext接口时提供基础的bean’操作相关方法,通过其他接口扩展其功能

ApplicationContext接口常用初始化类

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext

在这里插入图片描述


http://www.ppmy.cn/server/141238.html

相关文章

【进阶】Stable Diffusion 插件 Controlnet 安装使用教程(图像精准控制)

Stable Diffusion WebUI 的绘画插件 Controlnet 最近更新了 V1.1 版本&#xff0c;发布了 14 个优化模型&#xff0c;并新增了多个预处理器&#xff0c;让它的功能比之前更加好用了&#xff0c;最近几天又连续更新了 3 个新 Reference 预处理器&#xff0c;可以直接根据图像生产…

[JAVAEE] 面试题(五) - HashMap, Hashtable, ConcurrentHashMap

目录 一. Hashtable1.1 Hashtable效率低下的原因: 二. ConcurrentHashMap2.1 ConcurrentHashMap更高效的原因: 三. HashMap, Hashtable, ConcurrentHashMap 之间的区别 HashMap是线程不安全的. 在多线程环境下, 使用: HashtableConcurrentHashMap 来确保线程安全. 一. Hashta…

科技改变生活:最新智能开关、调光器及插座产品亮相

根据QYResearch调研团队的最新力作《欧洲开关、调光器和插座市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;欧洲开关、调光器和插座市场的规模将攀升至57.8亿美元&#xff0c;并且在接下来的几年里&#xff0c;将以4.2%的复合年增长率&#xff08;CAGR&#xff…

pytest简单使用

一&#xff1a;Mark 1.注册标记 在项目根目录下创建固定名为 pytest.ini 的配置文件&#xff0c;文件格式需要加上 [pytest] &#xff0c;然后通过 markers 注册自定义标记 2.贴上标记 通过pytest加上装饰器&#xff0c;然后pytest.mark.XX配置自定义的标记&#xff0c;一个…

JS之正则表达式

一、什么是正则表达式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </…

llamaIndex和langchain对比及优劣对比

一. LangChain vs LlamaIndex: 基本描述 LlamaIndex在搜索和检索任务方面表现出色。它是一个强大的数据索引和查询工具&#xff0c;非常适合需要高级搜索的项目。LlamaIndex能够处理大型数据集&#xff0c;从而实现快速准确的信息检索。 LangChain是一个模块化和灵活的工具集框…

window下安装rust 及 vscode配置

安装 安装mingw64 &#xff08;c语言环境 选择posix-ucrt&#xff09; ucrt:通用c运行时库配置mingw64/bin的路径到环境变量中在cmd窗口中输入命令 "gcc -v" 4. 下载Rust安装程序 安装 Rust - Rust 程序设计语言 5. 配置rustup和cargo目录 &#xff08;cargo是包管…

我国成功发射航天宏图PIESAT-2 01~04星

11月9日11时39分&#xff0c;我国在酒泉卫星发射中心使用长征二号丙运载火箭&#xff0c;成功将航天宏图PIESAT-2 01&#xff5e;04星发射升空&#xff0c;卫星顺利进入预定轨道&#xff0c;发射任务获得圆满成功[1]。 航天宏图信息技术股份有限公司&#xff08;以下简称“航天…