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类中的方法的具体使用。 线程:比进程更小的执行单元,每…

Php“牵手”京东商品详情页数据采集方法,京东API接口申请指南

京东详情接口 API 是开放平台提供的一种 API 接口,它可以帮助开发者获取商品的详细信息,包括商品的标题、描述、图片等信息。在电商平台的开发中,详情接口API是非常常用的 API,因此本文将详细介绍详情接口 API 的使用。 一、京东…

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

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

Linux 信号的基本概念

信号的基本概念 1. 信号的概念 信号是Linux系统响应某些条件产生的一些事件。接收到信号的进程会相应地采取一些行动。 2. 信号的生成 信号是由于某些错误条件而生成的,如内存段冲突、浮点处理器错误或非法指令等。信号的生成其实就是一种软件层次的中断&#x…

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

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

JVM——类的生命周期

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

Redis-秒杀

唉 就记得当时抢冰墩墩的时候的秒杀了 我们要注意什么问题呢? 1.几百万人在这个瞬间抢冰墩墩 这个瞬间会有大量的请求 服务器要能抗的住 2.不能超卖,就那些冰墩墩 卖多了压根没有 好不容易抢到你说没货了怕不是要被冲烂 3.避免少卖 拢共就那些 你再少卖点 没屁了 4.防黄牛…

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项目…

《Go 语言第一课》课程学习笔记(七)

代码块与作用域:如何保证变量不会被遮蔽? 什么是变量遮蔽呢?package mainimport ("fmt""github.com/google/uuid""github.com/sirupsen/logrus" )func main() {fmt.Println("hello, world")logrus.…

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

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

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…

C#学习,委托,事件,泛型,匿名方法

目录 委托 声明委托 实例化委托 委托的多播 委托的用途 事件 通过事件使用委托 声明事件 泛型 泛型的特性 泛型方法 泛型的委托 匿名方法 编写匿名方法的语法 委托 类似于指针,委托是存有对某个方法的引用的一种引用类型变量,引用可以在运…

vue中使用faker库生成指定类型的随机数据

介绍 Faker.js 是十分流行的 Node.js 工具库,2022年初,Faker.js的作者突然删库跑路,导致众多应用程序崩溃,为了继续使用Faker的功能,社区的几位开发者组成团队决定创建并维护新项目faker-js/faker,现其已成…

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…