spring bean创建总览 1

1 开始

 

这是一个总图

下边慢慢看

 我们最基础的写的方式就是xml的方式去写

 像这样,

而我们会通过applicationContext的方式去获得我们的bean ,我其中一篇博客就写到了applicationContext他的父类就是beanFactory

 但是中间的是怎么样处理的呢?

 因为你获取getbean 的时候要么是bean.class 要么就是这个  bean的名字。所以思考应该是在容器中用map去存放的这个bean。和我们创建bean的一些东西,等等

 

我们可以知道,我们可以通过xml和properties 还有yaml定义一些bean定义信息(虽然我们很少将bean的定义信息写成properties和还有yaml文件)但是 其实这些文件解析成bean的时候会解析成统一的beanDefinition。这时候会有一个解析处理环节。 而这个解析环节有一个解析处理环节就是beanDefinitionReader。然后beanDefiniton会通过反射去实例化。

bean工厂是一个容器的跟接口和入口 ,反射的代码也是在bean工厂搞的

bean工厂就是一个核心容器

 我么需要postProcessor  后置处理器。

 

 我们拿到beanfactory之后进型增强,你的那个 ,还有上边的那个动态修改属性值的问题。

我们就有一个placeholder(占位符)处理的接口。

 

 在源码中经常会遇到一个populate的方法,这个方式其实就是填充属性的

Aware 接口讲解一下:

我想让a对象有一个获得当前容器的这样一个功能没那莫我就让他a这个类趋势实现applicationcontextaware接口,并实习其中的方法就行如

  然后在提供一个get方法就ok了。

比如说我需要知道我的beanname这时候我就可以继承beannameaware

需要框架啥组件就实现对应得aware接口就行。

你做二次开发得时候这时候就需要了

在这个方法里边就会有一个方法

 

AbstractApplicationContext 有这么一个抽象类,其中有一个方法叫reflash。

里边有

 各种忽略,那么这一块呢还能不仅能忽略接口还能忽略类型。这里有了解即可以后在说。

beanpostpocesser 这里有个前之有个后置,两个方法,他有一个实现类,    

走到最后,你会看到

所以这一块就是aop 。

 这个图就是说明了最简单的bean创建,仅仅是bean创建时是怎么可以扩展的那一部分。不完整

 

1结束

 2开始

 

 这个顺序为啥是这样得        

 人家就是这莫遵循得,所以在学tomcat源码得时候好像也是这样,一层一层得都去遵循了自己得这个生命周期。

那么在bean初始化时候如上上图,我们不是知道他分为几个阶段吗?在每个阶段完成之后我们就让他输出他已经完成了。那么这个工作怎么做,这就需要 观察者模式了

 一些重点得接口

还有一个beanDefinitionRegister 这个主要是对beandefinition增删改查得 。

一个小小得面试题

首先,Spring 里面的核心功能是 IOC 容器,所谓 IOC 容器呢,本质上就是一个 Bean
的容器或者是一个 Bean 的工厂。
它能够根据 xml 里面声明的 Bean 配置进行 bean 的加载和初始化,然后 BeanFactory
来生产我们需要的各种各样的 Bean。

BeanFactory 是所有 Spring Bean 容器的顶级接口,它为 Spring 的容器定义了一
套规范,并提供像 getBean 这样的方法从容器中获取指定的 Bean 实例。
BeanFactory 在产生 Bean 的同时,还提供了解决 Bean 之间的依赖注入的能力,
也就是所谓的 DI。
FactoryBean 是一个工厂 Bean,它是一个接口,主要的功能是动态生成某一个类型的
Bean 的实例,也就是说,我们可以自定义一个 Bean 并且加载到 IOC 容器里面。
它里面有一个重要的方法叫 getObject(),这个方法里面就是用来实现动态构建 Bean
的过程。
Spring Cloud 里面的 OpenFeign 组件,客户端的代理类,就是使用了 FactoryBean
来实现的。

a是由afactiorybean调用getobject生成得

容器创建得时候不会有a ,他不会遵循bean得生命周期。

 

 感悟

学习接口得作用,以及他设计得思想。

2结束

 

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

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

相关文章

springboot引入druid解析sql

一、前言 在开发中&#xff0c;有时我们可能会需要获取SQL中的表名&#xff0c;那么因为不同的数据源类型SQL会存在部分差异&#xff0c;那么我们就可以使用alibaba 的druid包实现不同的数据源类型的sql解析。 二、引入相关maven依赖 <dependency><groupId>com.a…

MySQL表的操作

MySQL表的操作 创建表查看表结构的详细信息修改表结构增加表结构属性删除表结构表结构的修改 删除表结构 创建表 语法: create table table_name( field1 datatype [comment xxxxx], field2 datatype [comment xxxxx], field3 datatype [comment xxxxx]) [charsetxxx][collatey…

idea 转换为 Maven Project 的方法

选项&#xff1a; Add as Maven Project

一、进入sql环境,以及sql的查询、新建、删除、使用

1、进入sql环境 》》》mysql -u root -p 》》》输入密码 2、sql语言的分类 3、注意事项&#xff1a; 4、基础操作&#xff1a; &#xff08;1&#xff09;查询所有数据库&#xff1a; show databases; 运行结果&#xff1a; &#xff08;2&#xff09;创建一个新的数据库&…

ceph数据分布

ceph的存储是无主结构&#xff0c;数据分布依赖client来计算&#xff0c;有两个条主要路径。 1、数据到PG 2、PG 到OSD 有两个假设&#xff1a; 第一&#xff0c;pg的数量稳定&#xff0c;可以认为保持不变&#xff1b; 第二&#xff0c; OSD的数量可以增减&#xff0c;OSD的…

我能“C”——实用的调试技巧

什么是bug&#xff1f; 调试是什么&#xff1f;有多重要&#xff1f; debug和release的介绍。 windows环境调试介绍。 一些调试的实例。 如何写出好&#xff08;易于调试&#xff09;的代码。 编程常见的错误。 1.什么是bug&#xff1f; 世界上第一个bug是程序员赫柏发现的。 …

中大许少辉博士《乡村振兴战略下传统村落文化旅游设计》中国建筑工业出版社八一付梓。

中大许少辉博士《乡村振兴战略下传统村落文化旅游设计》中国建筑工业出版社八一付梓。

Django之定时任务--apscheduler

Django--定时任务apscheduler的使用 apscheduler定时任务的使用1、安装包2、配置settings.py3、在manage.py的文件同级目录下创建文件scheduler.py4、在项目的urls.py中调用这个定时计划5、然后启动项目 python manage.py runserver,在admin中查看就能看到你的定时任务及执行的…

【编程二三事】ES究竟是个啥?

在最近的项目中&#xff0c;总是或多或少接触到了搜索的能力。而在这些项目之中&#xff0c;或多或少都离不开一个中间件 - ElasticSearch。 今天忙里偷闲&#xff0c;就来好好了解下这个中间件是用来干什么的。 ES是什么? ​ ES全称ElasticSearch&#xff0c;是个基于Lucen…

【使用群晖远程链接drive挂载电脑硬盘】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

springBoot是如何实现自动装配的

目录 1 什么是自动装配 2 Spring自动装配原理 2.1 SpringBootConfiguration ​编辑 2.2 EnableAutoConfiguration 2.2.1 AutoConfigurationPackage 2.2.2 Import({AutoConfigurationImportSelector.class}) 2.3 ComponentScan 1 什么是自动装配 自动装配就是将官方写好的的…

Redis哨兵模式搭建

Redis哨兵模式搭建 在Redis主从复制这篇文章中我们分析了主从复制的特点&#xff0c;其中一个问题就是主机宕机后需要手动调整&#xff0c;修改从机 为主机&#xff0c;不仅不利于迅速恢复生产场景&#xff0c;还会增加人力成本。哨兵模式的出现是就是为了解决我们主从复制模…

比ChatGPT更强的星火大模型V2版本发布!

初体验 测试PPT生成 结果&#xff1a; 达到了我的预期&#xff0c;只需要微调就可以直接交付&#xff0c;这点比ChatGPT要强很多. 测试文档问答 结果&#xff1a; 这点很新颖&#xff0c;现在类似这种文档问答的AI平台收费都贵的离谱&#xff0c;星火不但免费支持而且效果也…

[oeasy]python0085_[趣味拓展]字体样式_下划线_中划线_闪动效果_反相_取消效果

字体样式 回忆上次内容 \033 xm 可以改变字体样式 0m - 10m 之间设置的 都是字体效果 0m 复原1m 变亮2m 变暗 从3m到10m 又是什么效果 呢&#xff1f;&#xff1f; 真的可以 让文字 blink闪烁吗&#xff1f;&#x1f441; 3m 3m 实现斜体字的效果 4m 4m 对应着下划线 控…

16.5.3 【Linux】SELinux 三种模式的启动、关闭与观察

并非所有的 Linux distributions 都支持 SELinux 的&#xff0c;所以你必须要先观察一下你的系统版本为何。 目前 SELinux 依据启动与否&#xff0c;共有三种模式&#xff0c;分别如下&#xff1a; enforcing&#xff1a;强制模式&#xff0c;代表 SELinux 运行中&#xff0c;…

Es、kibana安装教程-ES(二)

上篇文章介绍了ES负责数据存储&#xff0c;计算和搜索&#xff0c;他与传统数据库不同&#xff0c;是基于倒排索引来解决问题的。Kibana是es可视化工具。 分布式搜索ElasticSearch-ES&#xff08;一&#xff09; 一、ElasticSearch安装 官网下载地址&#xff1a;https://www…

springBoot 配置文件 spring.mvc.throw-exception-if-no-handler-found 参数的作用

在Spring Boot应用中&#xff0c;可以通过配置文件来控制当找不到请求处理器&#xff08;handler&#xff09;时是否抛出异常。具体的配置参数是spring.mvc.throw-exception-if-no-handler-found。 默认情况下&#xff0c;该参数的值为false&#xff0c;即当找不到请求处理器时…

ES踩坑记录之UNASSIGNED分片无法恢复

问题背景 换节点 我们线上有一套ES集群&#xff0c;三台机器&#xff0c;共运行了6个节点。一直在线上跑了几个月也一直没出什么问题。然而好巧不巧&#xff0c;就在昨天&#xff0c;集群中的3号节点磁盘出现故障&#xff0c;导致机器直接瘫痪。本来大家觉得问题不大&#xf…

Android12 偶现触摸失灵

生产线 在烧录固件时&#xff0c;会偶然出现稍完之后屏幕触摸用不了。前期以为是烧录没弄好&#xff0c;后面又发生&#xff0c;就怀疑与产品有关了。 首先进行抓日志分析&#xff1a;有问题的设备先确认下dmesg信息 adb连接设备进行日志抓取&#xff1a; logcat > /sdcard…

QT的工程文件认识

目录 1、QT介绍 2、QT的特点 3、QT模块 3.1基本模块 3.2扩展模块 4、QT工程创建 1.选择应用的窗体格式 2.设置工程的名称与路径 3.设置类名 4.选择编译器 5、QT 工程解析 xxx.pro 工程配置 xxx.h 头文件 main.cpp 主函数 xxx.cpp 文件 6、纯手工创建一个QT 工程…