【笔记】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.mzph.cn/news/236707.shtml

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

相关文章

公章透明png图片怎么弄?一键生成透明图片

公章透明png图片可以应用于图像或照片的水印保护。通过将公章图片作为水印添加到图像上&#xff0c;可以保护图像的版权和来源&#xff0c;并防止未经授权的复制和使用&#xff0c;但是通常我们扫描到电脑上的公章图片都是有背景底色的&#xff0c;如何将图片去背景变透明呢&am…

Android Studio使用Genymotion

1. Genymotion介绍 GenyMotion速度之快令人发指&#xff0c;模拟效果堪比真机调试&#xff0c;支持绝大部分的模拟器功能&#xff0c;甚至包括语音&#xff0c;Google Now&#xff0c;支持eclipse, android studio。非常适合用来开发和演示效果。 2. Genymotion下载 Genymotio…

设计模式03结构型模式

结构型模式 参考网课:黑马程序员Java设计模式详解 博客笔记 https://zgtsky.top/ 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于…

数字生态文明:构建可持续发展的未来

数字技术的快速发展给人类社会带来了巨大的变革,同时也对生态环境产生了深远的影响。在这个背景下,数字生态文明的概念应运而生,它强调在数字时代实现经济、社会和环境的协调发展,构建可持续的未来。 一、数字生态文明的内涵 数字生态文明是指在数字经济发展过程中,遵循…

什么是逆变器电源?逆变器需要测试哪些指标?

逆变器是一种将低压直流电(12v/24v/48v)转化为220v交流电的电子设备&#xff0c;由逆变桥、控制逻辑、滤波电路组成&#xff0c;被广泛应用于电脑、洗衣机、空调、太阳能发电系统、电池储能系统、风力发电系统等。逆变器有以下特点&#xff1a; 1.转换效率高、启动快; 2.安全性…

Java 第14章 集合 课堂练习

文章目录 HashSet判断是否两次add都能加入成功HashSet编码遍历HashMap判断输出中是否有"abc" HashSet判断是否两次add都能加入成功 HashSet set new HashSet(); set.add(new String("hsp")); set.add(new String("hsp"));第一次可以&#xff0…

直播电商“去网红化”势在必行,AI数字人打造品牌专属IP

近年来&#xff0c;网红直播带货“翻车”事件频发&#xff0c;给品牌商带来了信任危机和负面口碑的困扰&#xff0c;严重损害了企业的声誉。这证明强大的个人IP,对于吸引粉丝和流量确实能起到巨大的好处,堪称“金牌销售”,但太过强势的个人IP属性也会给企业带来一定风险&#x…

.NET 药厂业务系统 CPU爆高分析

Windbg 分析 1. CPU 真的爆高吗 还是老规矩&#xff0c;要想找到这个答案&#xff0c;可以使用 !tp 命令。 0:044> !tp logStart: 1 logSize: 200 CPU utilization: 88 % Worker Thread: Total: 8 Running: 4 Idle: 4 MaxLimit: 1023 MinLimit: 4 Work Request in Queue: …

如何本地搭建Zblog网站并通过内网穿透将个人博客发布到公网

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站…

Navicat里MySQL表的创建(详细)

我以Navicat连接MySQL为例&#xff0c;演示表的创建方法。 前提 创建表的语法&#xff1a; create table 表名 &#xff08; 字段名1&#xff0c;字段类型&#xff0c; 字段名2&#xff0c;字段类型&#xff0c; ...... 字段名n&#xff0c;字段类型 ); 我计划在test库存放一…

第三方登录-pc支付宝扫码登录流程

最近有个奇葩的需求&#xff0c;用户要支持支付宝扫码登录。这个需求很少见&#xff0c;那就做一下&#xff0c;看起来有点难&#xff0c;其实很简单。 先看结果 流程梳理 核心代码 获取支付宝扫码页面的url // 获取支付宝扫码登录页面的urlasync function getZFBLoginUrl()…

动态规划--三步问题

本题题目链接备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/three-steps-problem-lcci/ 个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 动态规划&…

Centos 8.5 Oracle12c安装

由于多次安装踩坑&#xff0c;所以本次写了一份12c安装的完整版。可以直接使用。 一、安装数据库基本信息 名称 值 主机名 database 操作系统 CentOS Linux release 8.5.2111 Oracle用户名/密码 oracle Oracle 版本 12c Enterprise Edition Release 12.2.0.1.0 oracle…

Java 基础学习(十五)集合排序、Lambda和Stream

1 集合排序 1.1 集合排序API 1.1.1 集合排序概述 集合排序是指对一个集合中的元素按照特定规则进行重新排列&#xff0c;以使得集合中的元素按照预定义的顺序呈现。 在集合排序中&#xff0c;通常需要定义一个比较规则&#xff0c;这个比较规则用于决定集合中的元素在排序后…

【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【LeetCode刷题笔记(11-1)】【Python】【和为 K 的子数组】【前缀和】【中等】

文章目录 引言和为 K 的子数组题目描述提示 解决方案1&#xff1a;【暴力枚举】解决方案2&#xff1a;【前缀和】结束语 和为 K 的子数组 引言 编写通过所有测试案例的代码并不简单&#xff0c;通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例&#xff0c;但…

SQL进阶理论篇(十七):数据库主从同步的原理

文章目录 简介为什么需要主从同步主从同步的原理总结参考文献 简介 以MySQL数据库为例&#xff0c;在实际生产中&#xff0c;我们会如何对MySQL数据库进行性能优化呢&#xff1f; 比如说配合上Redis做缓存。Redis是一种高性能的内存数据库&#xff0c;而MySQL是一种基于磁盘文…

docker-compose安装Rocketmq总结,以及如何更换mq端口

默认你已经装好了docker哈 安装docker-compose sudo curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-composechmod x /usr/local/bin/docker-composedocker-compose --version成功打印…

截断霍夫曼编码

截断霍夫曼编码是一种数据压缩技术&#xff0c;它基于霍夫曼编码的原理&#xff0c;通过截断霍夫曼树&#xff0c;减少编码中的冗余信息&#xff0c;实现更高效的数据压缩。在本文中&#xff0c;我们将详细探讨截断霍夫曼编码的原理、应用及其优势。 一、霍夫曼编码简介 霍夫曼…

12.21 汇编点亮STM32MP157小灯

.text .global _start _start: 时钟使能pb6 pf6 pe9LDR r0,0x50000A28LDR r1,[r0]ORR r1,r1,#(0x1<<4)ORR r1,r1,#(0x1<<5)ORR r1,r1,#(0x1<<1)STR r1,[r0]配置GPIO模式LDR r0,0x50006000LDR r1,[r0]BIC r1,r1,#(0x2<<20)ORR r1,r1,#(0x1<<20)B…