【笔记】Spring是什么

什么是spring?

Spring的基础知识铺垫

IOC AOP<-Spring->容器->生态

先说你的认知,总-分结构
spring是一个基础的框架,同时提供了Bean的容器,用来方便装载具体的Bean对象,之前在使用对象的时候必须自己new,而现在只要告诉容器有哪些对象他会帮我们创建好,并且维护好整个的生命周期。我们在spring的基础上还有SpringBoot、SpringCloud都是在此基础上。
分:
1、什么是IOC?什么是AOP?
IOC表示控制反转,原来我们需要自己去创建对象,并且交由容器去管理控制对象,AOP表示面向切面编程,跟业务逻辑无关的代码能通过AOP来实现,比如说工作中的日志、事务管理都是通过AOP来实现的。也就是说具体的业务逻辑不变,扩展的时候通过AOP的声明通知、具体方法的前置后置Around等添加与业务无关的代码。
2、IOC、AOP如何实现?生命周期、循环依赖?

Spring加载注解和配置文件概述

1、Spring容器简介

Spring中有一个容器,容器中间有多个map对象
在这里插入图片描述

2、Spring加载注解和配置文件

spring源码的xml与注解转换成了BeanDefinition对象

在这里插入图片描述

3、在此中间考虑了扩展性,增加了接口 约束规范

BeanDefinitionReader,只要实现了这个接口就不限于xml、注解、还能增加properties等等去实现bean的定义信息
在这里插入图片描述
(题外话)抽象类与接口的区别
抽象是自下向上,接口是自上向下
在这里插入图片描述

4、spring的扩展接口-BeanFactoryPostProcessor

首先要从BeanDefiniton直接到创建Bean对象,首先想到的思路是反射。
反射
1、获取对象Class clazz=class.forName
2、获取构造器Constructor ctor=clazz.getDeclareConstructor()
3、创建对象
ctor.newInstance()
在这里插入图片描述
但是,理论上直接BeanDefiniton通过反射创建Bean对象,不就能解决问题了吗?别着急,上面图片中的xml文件的property属性中有若干占位符需要替换进去,需要解决这个问题,就不能直接用反射
当我们要创建BeanDefinition后,创建bean对象之前,需要替换jdbc.username这些参数,需要PostProcessor(增强器,提供某些额外的扩展功能)
在这里插入图片描述
上面说的针对的操作对象不同:
BeanFactory代表访问Spring Bean容器的根接口
Bean代表对象
在这里插入图片描述
postProcessor处理了占位符,比如刚刚说的jdbc.username,生成完整的BeanDefinition对象
由于BeanFactory是顶级接口,

5、Bean的生命周期

从对象的创建到销毁的过程,粗略来说就是Bean对象的创建、使用、销毁。
在这里插入图片描述

第一步,实例化在堆空间中申请空间,此时对象的属性值一般是默认值,反射创建对象的过程createBeanInstance
在这里插入图片描述
发现下面的三步,不就是反射的三步骤吗?获取class对象,获取构造器,newInstance。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二、三步,初始化(自定义属性赋值,populateBean)、容器对象属性赋值(Aware就是一个标志,实现接口,能在统一的方法进行处理,invokeAwareMethods)

Spring中的Bean对象按照使用者分为几类?
1.我们的自定义对象;

2.容器对象;(不是我们要用的,是容器在创建过程中要使用的对象),例如:BeanFactory、ApplicationContext、Environment;

在这里插入图片描述
理论上到此前三步搞定,对象的创建和属性的赋值都完成了,就做了new一个对象,然后set参数,对象能拿来使用了,但是注意spring要考虑扩展性。


第四步,postProcessor-做Bean对象的扩展实现
在这里插入图片描述

前置方法,什么都没有
在这里插入图片描述
后置方法,一路点下去
在这里插入图片描述

在这里插入图片描述

所以结论:AOP其实就是IoC整体流程(Bean生命周期)里的一个扩展点
第五步,InitializingBean——执行初始化方法
在这里插入图片描述
至此图上的7个步骤都处理结束,接着就能使用Bean对象


使用对象
context.getBean()

销毁Bean对象(不用)
在这里插入图片描述
我们开发用不到销毁容器的代码,所以不用管

默写图例

在这里插入图片描述

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

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

相关文章

C语言操作符详解+运算符优先级表格

目录 前言 一、操作符是什么&#xff1f; 二、操作符的分类 三、算术操作符 四、逻辑操作符 五、比较操作符 六、位操作符 七、赋值操作符 八、其他操作符 九、运算符优先级表格 总结 前言 在编写程序时&#xff0c;最常用到的就是操作符&#xff0c;本文将详细的介绍…

STM32的以太网外设+PHY(LAN8720)使用详解(7):以太网数据接收及发送测试

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册 4.Wireshark1 以太网数据接收测试 1.1 以太网数据接收测试&#xff08;轮询&#xff09; 我们在主循环内轮询RX DMA描述符标志位查看是否接收到了数据&#xff0c;如果接收到了则将数据…

在nodejs中使用讯飞星火大模型3.0的demo

需求&#xff1a; 在nodejs引入讯飞星火大模型的api接口, 思路 看了一下官方文档 api连接为一个WebSocket Secure&#xff08;WSS&#xff09;连接&#xff0c;具体思路如下&#xff1a; 引入 crypto 和 ws 模块&#xff0c;分别用于生成加密签名和创建 WebSocket 连接。&am…

27. 过滤器

Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截&#xff0c;从而在 Servlet 进行响应处理的前后实现一些特殊的功能。在 Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序&#xff1a;Filter, FilterChain, FilterConfigFi…

PHP笔记

文章目录 PHP一、什么是PHP二、PHP集成环境的安装三、WampServer四、PHP基础PHP标准格式php注释变量的定义传值替换变量的作用域变量的检测与删除static静态变量进制转换响应头字符串边界定位符字符串函数常量的定义三元表达式 五、基础文件引入点函数参数类型约束以及严格模式…

OpenAI 官方 Prompt 工程指南:写好 Prompt 的六个策略

其实一直有很多人问我&#xff0c;Prompt 要怎么写效果才好&#xff0c;有没有模板。 我每次都会说&#xff0c;能清晰的表达你的想法&#xff0c;才是最重要的&#xff0c;各种技巧都是其次。但是&#xff0c;我还是希望发给他们一些靠谱的文档。 但是&#xff0c;网上各种所…

Postman接口测试之Post、Get请求方法

一、基础知识 1.HTTP的五种请求方法&#xff1a;GET&#xff0c; POST &#xff0c;HEAD&#xff0c;OPTIONS&#xff0c; PUT&#xff0c; DELETE&#xff0c; TRACE 和 CONNECT 方法。 GET请求&#xff1a;请求指定的页面信息&#xff0c;并返回实体主体。&#xff08;通常用…

“用户名不在 sudoers文件中,此事将被报告” 解决方法

原因 当普通用户需要安装文件时&#xff0c;无法用yum install ** -y直接安装时&#xff0c;采用sudo yum install **; 但是发现提示“用户名不在 sudoers文件中&#xff0c;此事将被报告” 解决方法。 这是因为该普通用户不在sudoers文件中&#xff0c;所以要找到该文件&am…

SpringIOC之BeanFactoryResolver

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

2024年软件测试工程师如何从功能测试转成自动化测试?

前言 接触了太多测试同行&#xff0c;由于多数同行之前一直做手工测试&#xff0c;现在很迫切希望做[<u>自动化测试</u>](javascript:;)&#xff0c;其中不乏工作5年以上的同行。 从事软件自动化测试已经近十年&#xff0c;接触过底层服务端、API 、Web、APP、H5…

Ethercat 读从站状态报文分析

涉及的从站寄存器&#xff1a;Register AL Status 0x0130:0x0131 。 1&#xff0c;发送报文 1&#xff09;IgH dmesg看到的报文 [18773.590655] geshifei ec_master_send_datagrams 1059: Adding datagram datagram->index0 [18773.590656] EtherCAT DEBUG 0: frame siz…

机器学习---推荐系统案例(二)

四、推荐系统---模型训练 1、模型训练代码 模型训练代码参照scala文件&#xff1a;Recommonder.scala 1.Logger.getLogger("org.apache.spark").setLevel(Level.ERROR) 2.val conf new SparkConf().setAppName("recommonder").setMaster("local[*…

《成才》期刊投稿方式发表要求

《成才》杂志是国家新闻出版总署批准&#xff0c;面向国内外公开发行的教育期刊&#xff0c;以“大教育视野、新理念成才”为办刊宗旨&#xff0c;全面贯彻党的教育方针&#xff0c;理论联系实际&#xff0c;开展教育科学研究和人才培养研究&#xff0c;交流科技成果&#xff0…

TrustZone之示例用例——加密文件系统

移动设备如智能手机包含大量个人数据。如果设备丢失或被盗&#xff0c;用户会关心这些数据的机密性。这就是为什么大多数最新的设备支持文件系统加密的原因。TrustZone 可以作为保护这些数据的解决方案的一部分。 存储在外部闪存中的数据是加密的。在启动时&#xff0c;设备对用…

React学习计划-React16--React基础(二)组件与组件的3大核心属性state、props、ref和事件处理

1. 组件 函数式组件&#xff08;适用于【简单组件】的定义&#xff09; 示例&#xff1a; 执行了ReactDOM.render(<MyComponent/>, ...)之后执行了什么&#xff1f; React解析组件标签&#xff0c;找到了MyComponent组件发现组件是使用函数定义的&#xff0c;随后调用该…

Hive文件存储与压缩

压缩和存储 1、 Hadoop压缩配置 1) MR支持的压缩编码 压缩格式工具算法文件扩展名是否可切分DEFAULT无DEFAULT.deflate否GzipgzipDEFAULT.gz否bzip2bzip2bzip2.bz2是LZOlzopLZO.lzo否LZ4无LZ4.lz4否Snappy无Snappy.snappy否 为了支持多种压缩/解压缩算法&#xff0c;Hadoop…

数据结构 | 查漏补缺

目录 数据的基本单位 冒泡排序 DFS和BFS中文 Prim 比较 中序线索二叉树 顺序栈 链栈 时间复杂度 循环队列 求第K个结点的值 数据的基本单位 数据元素 循环队列sq中&#xff0c;用数组elem[0‥25]存放数据元素&#xff0c;设当前sq->front为20&#xff0c;sq-&g…

【C++11特性篇】模板的新一力将:可变参数模板 [全解析]

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》专…

循环神经网络中的梯度消失或梯度爆炸问题产生原因分析(二)

上一篇中讨论了一般性的原则&#xff0c;这里我们具体讨论通过时间反向传播&#xff08;backpropagation through time&#xff0c;BPTT&#xff09;的细节。我们将展示目标函数对于所有模型参数的梯度计算方法。 出于简单的目的&#xff0c;我们以一个没有偏置参数的循环神经…

华为鸿蒙开发应用工程师:连接未来,创造无限可能

1. 引言 随着智能设备的不断普及和发展&#xff0c;华为鸿蒙作为下一代全场景分布式操作系统&#xff0c;为开发者提供了全新的应用开发平台。作为一名鸿蒙开发应用工程师&#xff0c;您将扮演连接未来的重要角色&#xff0c;为智能生活创造无限可能。 2. 深度参与全场景应用…