spring 的理解

spring 的理解

  1. spring 是一个基础的框架,同时提高了一个Bean 的容器,用来装载Bean对象
  2. spring会帮我们创建Bean 对象并维护Bean对象 的生命周期。
  3. 在spring 框架上,还有springCloud,spring Boot 的技术框架,都是以Spring为基石的
  4. spring 有两个核心,就是IOC和AOP

Spring IOC 是什么?

  • 控制反转,将对象和对象的关系由spring 统一管理,而这些对象统称 Bean
  • IOC本质上就是一个对象工厂:使用时需要将bean实例化,
    Spring提供了IOC容器的两种实现方式
    ​ ① BeanFactory接口:是面向Spring本身的,不是提供给开发人员使用的
    ​ ② ApplicationContext接口:BeanFactory的子接口,面向开发人员使用

Spring AOP 是什么?

  • 面向切面编程
  • 我们可以将一些与业务逻辑无关的代码,来通过切面来实现,比如:日志,权限控制,事务管理,接口限制
  • 在使用中,我们需要实现前置方法,后置方法,通知等

IOC 容器是怎么实现的?

  1. 配置Bean
    通过xml或者是@Component @Bean 等进行配置

  2. 解析Bean,得到BeanDefinition定义对象
    通过 BeanDefintionReader 将 bean 进行解析,准备要创建的bean对象的定义对象BeanDefinition,存放到BeanDefintionMap 中,将beanName和bean值进行保存

  3. 实例化bean
    BeanFactory通过反射的方式j将BeanDefinition定义对象实例化成具体的bean对象
    注意:在这之前也可以进行beanFactoryPostProcessor(Bean的增强器)的处理,我们可以根据获取到的BeanDefinition 定义对象做特殊处理

  4. 初始化Bean
    (1)填充属性: 通过populateBean 填充属性
    (2)执行aware 接口所实现的方法:方便通过bean对象来获取容器中的属性值
    (3)调用BeanPostProcessor前置处理方法:AOP等都在这里实现
    (4)调用init-mehtod方法
    (5)调用BeanPostProcessor的后置处理方法

  5. 生成Bean
    通过getBean方法可以直接获取

  6. 销毁Bean

Bean 的生命周期

在这里插入图片描述

1 实例化bean: BeanFactory通过反射的方式j将BeanDefinition定义对象实例化成具体的bean对象
2. 填充属性: 通过populateBean 填充属性
3. 执行aware 接口所实现的方法:方便通过bean对象来获取容器中的属性值
4. 调用BeanPostProcessor前置处理方法:
5. 调用 init-mehtod方法
6.调用BeanPostProcessor的后置处理方法:AOP等都在这里实现
7. 通过getBean 来获取Bean
8. x销毁Bean

扩展

Spring是如何简化开发的?

  • 通过依赖注入和面向接口实现松耦合
  • 基于切面和惯例进行声明式编程
  • 通过切面和模板减少样板式代码

Spring IOC的实现机制

  • 简单工厂
  • 反射

什么是Bean,什么是对象

  • Spring 管理对象Bean
  • bean 一定时对象,对象不一定是Bean

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

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

相关文章

Covalent Network(CQT)的以太坊时光机:在 Rollup 时代确保长期数据可用性

以太坊正在经历一场向 “Rollup 时代” 的转型之旅,这一转型由以太坊改进提案 EIP-4844 推动。这标志着区块链技术的一个关键转折,采用了一种被称为“数据块(blobs)”的新型数据结构。为了与以太坊的扩容努力保持一致,…

基于Arduino IDE 野火ESP8266模块 一键配网 的开发

一、配网介绍 ESP8266 一键配网(也称为 SmartConfig 或 FastConfig)是一种允许用户通过智能手机上的应用程序快速配置 ESP8266 Wi-Fi 模块的方法,而无需手动输入 SSID 和密码。为了实现这一功能,则需要一个支持 SmartConfig 的智能…

微服务(基础篇-006-Docker安装-CentOS7)

目录 05-初识Docker-Docker的安装_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p46&spm_id_frompageDriver&vd_source60a35a11f813c6dff0b76089e5e138cc 0.安装Docker 1.CentOS安装Docker 1.1.卸载(可选) 1.2.安装dock…

51单片机学习笔记8 中断系统及定时器

51单片机学习笔记8 中断系统及定时器 一、中断的概念二、51单片机的中断1. 51单片机的中断源2. 中断的优先级3. 中断结构4. 外部中断解读5. 定时器中断6. 串口中断 三、中断相关寄存器1. IE 中断允许寄存器2. TCON 中断请求标志3. IP 中断优先级 四、中断号五、代码实现按键 &a…

怎么制作iOS证书

首先我们登录appuploder官网 搜索 appuploder 第一个就是我们官网啦,网址是:Appuploader home -- A tool improve ios develop efficiency such as submit ipa to appstore and manage ios certificate 可以跨平台开发,无论是Windows还是Ma…

六大前端自动化测试框架推荐,提升你的开发效率与质量

在前端开发中,自动化测试是确保代码质量和提升开发效率的关键环节。本文将为你详细介绍六个前端自动化测试框架,包括它们的介绍、优缺点分析、使用场景以及简单案例,帮助你选择最适合的测试工具。 一、Jest 介绍:Jest是Facebook开…

SpringCloud学习笔记二:服务间调用

微服务中,很多服务系统都在独立的进程中运行,通过各个服务系统之间的协作来实现一个大项目的所有业务功能。服务系统间 使用多种跨进程的方式进行通信协作,而RESTful风格的网络请求是最为常见的交互方式之一。 spring cloud提供的方式&#…

初始Java篇(JavaSE基础语法)(2)(逻辑控制)

个人主页(找往期文章包括但不限于本期文章中不懂的知识点):我要学编程(ಥ_ಥ)-CSDN博客 目录 逻辑控制 顺序结构 分支结构 if语句 switch 语句 循环结构 while 循环 for 循环 do while 循环 输入输出 输出到控制台 从键盘输入 …

【LINUX笔记】汇编-裸机开发

裸机开发 chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可 ./imxdownload backlight.bin /dev/sdd //烧写到 SD 卡中, 不能烧写到/dev/sda 或 sda1 里面!汇编笔记 启动方式

七段码(蓝桥杯)

文章目录 七段码题目描述答案:80分析编程求解:有多种方法方法一:状态压缩枚举构图(以二极管为顶点)DFS判断连通代码方法二:bfs 七段码 题目描述 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了…

前端面试题---->JavaScript

const声明的对象属性和数组的值可以被修改吗?为什么 原因:当使用const声明一个对象或数组时,实际上是保证了对象或数组的引用不会被修改,但对象或数组本身的属性或元素是可以被修改的。这是因为const只能保证指向的内存地址不变&a…

基于 YAML 接口自动化测试框架设计

在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV),或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测…

c++AVL树

cAVL树 1. 前言 map/multimap、set/multiset这几个容器的共同点是:它们的底层都是按照搜索二叉树来实现的,但是搜索二叉树存在一个缺陷:如果往树中插入的元素有序或接近有序,二叉树搜索就会退化成单支树,时间复杂度会…

Vuex笔记

Vuex vuex 是实现数据集中式状态管理的插件。数据由 vex 统一管理。其它组件都去使用 vuex 中的数据。只要有其中一个组件去修改了这个 共享的数据,其它组件会同步更新。 多个组件之间依赖于同一状态。来自不同组件的行为需要变更同一状态。 环境搭建 1、vue2安…

Linux虚拟机环境搭建spark

Linux环境搭建Spark分为两个版本,分别是Scala版本和Python版本。 一、 安装Pyspark 本环境以 Python 环境为例。 1、下载spark 下载网址:https://archive.apache.org/dist/spark 下载安装包:根据自己环境选择合适版本,本环境…

BitMap介绍与应用

文章目录 BitMapBitMap介绍BitMap 结构RoaringBitmap 常见BitMapJava中的BitSetRedis中的BitMapClickHouse中的BitMap BitMap应用案例人群圈选 BitMap 场景一:(大部分开发面试都会遇到的一个问题) 有10亿个用户id (int类型),判断用户是否登…

自养号测评:如何助力跨境电商平台亚马逊、速卖通等店铺提升产品权重

对于卖家而言,爆款产品不仅意味着源源不断的流量,更是店铺销量增长的强有力保障。因此,多数卖家都积极学习如何打造爆款产品,特别是那些希望将店铺运营得风生水起的卖家们。那么,如何在激烈的市场竞争中打造出具有创新…

题解 P3295 【[SCOI2016]萌萌哒】

先引用一下这位大佬的题解,对此我再进行细化 题解 P3295 【[SCOI2016]萌萌哒】 - 洛谷专栏https://www.luogu.com.cn/article/it7foeu6并查集 首先是如何想出来需要并查集处理,下面是n8,第一组约束条件是[1,4]和[5,8],如下图&am…

算法的时间复杂度与空间复杂度

俗话说“条条大路通罗马”, 我们在用算法解决某一个问题时,往往会存在多种解决方法,但正如道路有远近之分,不同的算法也应该是有优劣的。为了更加清晰的量化算法的优劣,我们就需要引入算法的时间复杂度与空间复杂度了。…

我的 Android 性能书上架了!内附书籍介绍

大家好,我是拭心。 很高兴地向大家宣布,我的新书《Android 性能优化入门与实战》上架了! 点击下面的小程序进行购买: 封面介绍 这本书的封面来自之前的投票文章 # 投票啦!最新安卓进阶书籍封面由你来定,从四…