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.mzph.cn/news/41519.shtml

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

相关文章

VET:基因变异VCF数据集便捷提取工具

VET:Vcf Export Tools 工具简介 VET是一个基于R语言开发的变异位点信息批量提取工具,主要功能是根据VCF数据集,按照基因ID、样品ID、变异位点ID等参数,实现批量提取,同时支持变异位点结构注释,一步搞定变异…

android 的Thread类

Thread类 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,学习Thread类包括这些相关知识:线程的几种状态、上下文切换,Thread类中的方法的具体使用。 线程:比进程更小的执行单元,每…

uniapp编写微信小程序遇到的坑总结

1、阻止事件冒泡 使用uniapp开发微信小程序的时候,发现使用click.stop来阻止事件冒泡没有作用,点击了之后发现仍然会触发父组件或者祖先组件的事件。 在网上查阅,发现使用tap.stop才能阻止事件冒泡。 2、二维码生成 在网上找了很多&…

adb对安卓app进行抓包(ip连接设备)

adb对安卓app进行抓包(ip连接设备) 一,首先将安卓设备的开发者模式打开,提示允许adb调试 二,自己的笔记本要和安卓设备在同一个网段下(同连一个WiFi就可以了) 三,在笔记本上根据i…

JVM——类的生命周期

文章目录 类加载过程加载验证准备解析初始化 卸载 一个类的完整生命周期如下: 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->…

CentOS系统环境搭建(十五)——CentOS安装Kibana

centos系统环境搭建专栏🔗点击跳转 关于Elasticsearch的安装请看CentOS系统环境搭建(十二)——CentOS7安装Elasticsearch。 CentOS安装Kibana 文章目录 CentOS安装Kibana1.下载2.上传3.解压4.修改kibana配置文件5.授予es用户权限6.kibana 后台…

uniapp的UI框架组件库——uView

在写uniapp项目时候,官方所推荐的样式库并不能满足日常的需求,也不可能自己去写相应的样式,费时又费力,所以我们一般会去使用第三方的组件库UI,就像vue里我们所熟悉的elementUI组件库一样的道理,在uniapp中…

​ Spring Clould 配置中心 - Nacos

视频地址:微服务(SpringCloudRabbitMQDockerRedis搜索分布式) Nacos配置管理-Nacos实现配置管理(P24、P25) Nacos除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多&#xff0c…

18万字应急管理局智慧矿山煤矿数字化矿山技术解决方案WORD

导读:原文《18万字应急管理局智慧矿山煤矿数字化矿山技术解决方案WORD》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 目 录 第一章 项目概述 1.1项目…

私域新零售商业模式成功的八大要素

从事互联网行业多年以来,遇到客户问最多的一个问题,就是什么样的模式火呀?在设计一个商业模式时,不单单只是考虑资金和人脉等等资源的,其实还是需要遵循这八大原则,它包括:客户价值最大化原则、…

PyTorch学习笔记(十三)——现有网络模型的使用及修改

以分类模型的VGG为例 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) print(vgg16_true) vgg16_true.classifier.add_module("add_linear",nn.Linear(1000,10)) print(vgg16_true) vgg16_false.classifie…

Docker+Selenium Grid搭建自动化测试平台

安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce -y Create a Docker Network docker network create grid 下载镜像 hu…

laravel-admin之 解决上传图片不显示 $form->image(‘image‘); 及 $grid->column(‘image‘);

参考 https://blog.csdn.net/u013164285/article/details/106017464 $grid->column(‘image’)->image(‘http://wuyan.cn’, 100, 100); // //设置服务器和宽高 图片上传的域名 上传的图片不显示 在 这里设置了图片的上传路径 在这里设置 域名 就可以回显图片

【计算机视觉|生成对抗】带条件的对抗网络进行图像到图像的转换(pix2pix)

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Image-to-Image Translation with Conditional Adversarial Networks 链接:Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…

Android DataStore:安全存储和轻松管理数据

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、使用3.1 Preferences DataStore添加依赖数据读…

LVS负载均衡集群-NAT模式部署

集群 集群:将多台主机作为一个整体,然后对外提供相同的服务 集群使用场景:高并发的场景 集群的分类 1.负载均衡器集群 减少响应延迟,提高并发处理的能力 2,高可用集群 增强系统的稳定性可靠性&…

Java SPI加载机制

SPI加载机制 SPI(Service Provider Interface)是一种通过外界配置来加载具体代码内容的技术手段。SPI是JDK内置的一种服务提供发现机制,用于实现框架的扩展和组件替换。 在SPI中,框架提供一整套接口,使用者实现这些接…

学习红外成像仪开发注意要点

学习红外成像仪开发注意要点 三河凡科科技飞讯红外成像仪开发学习注意要点 红外成像仪是一种高级的光学设备,可用于探测、分析和显示红外辐射,它广泛应用于医学、军事、石油、矿产资源勘探等领域。红外成像仪的开发需要注意以下几个方面: 1…

(搜索) 剑指 Offer 12. 矩阵中的路径 ——【Leetcode每日一题】

❓剑指 Offer 12. 矩阵中的路径 难度:中等 给定一个 m * n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构…

Spring项目使用Redis限制用户登录失败的次数以及暂时锁定用户登录权限

文章目录 背景环境代码实现0. 项目结构图(供参考)1. 数据库中的表(供参考)2. 依赖(pom.xml)3. 配置文件(application.yml)4. 配置文件(application-dev.yml)5…