1.xmlBeanFactory对defaultListableBeanFactory类进行扩展,主要用于从XML文档中获取BeanDefinition,对于注册及获取bean都是使用从父类DefaultListableBeanFactory继承的方法去实现。
xmlBeanFactory 主要是使用reader属性对资源文件进行读取和注册。
2.循环依赖。创建bean,核心方法
getBean → doGetBean → createBean → doCreateBean → createBeanInstance → populateBean
3.BeanDefinitionReader获取资源文件,封装成BeanDefinition,通过BeanDefinitionRegistry将其注册起来,保存到BeanDefinitionMap中。BeanFactory根据bean定义信息,通过反射实例化bean。
4.FactoryBean,灵活创建bean。调用getObject方法,才会生成bean,但没有严格的bean生命周期流程
5.spring中有两种bean:容器bean(比如BFPP)、自定义bean
6.FactoryBean和BeanFactory
7.PostProcessor
8.循环依赖-三级缓存
真正的解决循环依赖是靠二级缓存,不用三级缓存也可以解决循环依赖,但这样就造成了在实例化后就立马完成代理,违背了最后一步完成代理的原则;
在创建bean的时候,在哪里通过什么方式创建了动态代理:通过BeanPostProcessor创建动态代理,在初始化之后或在出现循环依赖时实例化之后(实例化 -> 属性注入 -> 初始化)
发生循环依赖会用到二级缓存,普通依赖过程只用到一三级缓存
9.配置类加@Configuration 和不加的区别
@Bean中被依赖的bean不会被重复加载
@Configuration为Full配置类,经过了enhance增强处理,所有@Bean方法会被BeanMethodInterceptor拦截,根据方法名获取单例,而不是重复加载
10.Spring是怎样避免读取到不完整的Bean
防止多线程下Spring读取到不完整Bean加了两把锁
一把锁放在getSingleton()方法三级缓存,第二个线程阻塞直到第一个线程把二三级缓存删除完;
一把锁放在getSingleton(,)方法,先从单例池再拿一遍单例对象(double check防重复创建单例bean)
怎么样可以在所有Bean创建完后做扩展代码?
ContextRefreshedEvent/SmartInitializingSingleton
11.接口
BeanFactory
Aware
BeanDefition
BeanDefitionRegistry
BeanDefitionReader:bean定义信息读取器,解析xml、注解,转化为BeanDefinition,添加到BeanDefinitionMap中
BeanFactoryProcessor:bean工厂后置处理器,可以修改bean定义信息
BeanPostProcessor: bean后置处理器
Environment
FactoryBean
BeanFactory和factoryBean的区别都是用来创建对象的。当使用BeanFactory时,必须要遵循完整的创建过程。这个过程由spring管理。factoryBean只需要调用getObject就可以返回具体对象,整个对象创建过程由用户自己控制,更加灵活
12.spring执行流程
1.入口refresh();
2.实例化、初始化bean工厂,加载配置信息、资源、扫描包路径、注解,生成BeanDefinition对象,注册到BeanDefinitionMap中
3.注册BeanPostProcessor,执行BeanFactoryPostProcessor;
4.实例化bean(bean的生命周期)
OpenHarmony的DFX子系统提供了为应用框架以及系统底座核心模块的性能打点能力,每一处打点即是一个Trace,其上附带了记录执行时间、运行时格式化数据、进程或线程信息等。开发者可以使用SmartPerf-Host调试工具对Trace进行解析,在其绘制的泳道图中,对应用运行过程中的性能热点进行分析,得出优化方案。本文旨在介绍OpenHarmony中常用的Trace,解释它们的含义和用途,并阐述如何通过这些Trace来识别潜在的性能问题。
服务器基础知识
文章浏览阅读2.2w次,点赞4次,收藏54次。今天带大家进行模拟京东登录,并进行签到获取京豆,1000 个京豆 = 10 元,是不是一个发现了一个「发家致富」的好路子?废话不多说,下面开始正题。整体流程如下:京东自动签到流程1 模拟登录首先我们需要的就是模拟京东登录,只有登录了才能进行签到领京豆等操作。模拟登录其实就是通过 HTTP 的 POST 请求讲用户的登录信息发送给服务器进行认证的过程。1.1 登录数据分析登录过程表面上看着挺简单,我..._京东自动领京豆脚本
文章浏览阅读565次,点赞17次,收藏20次。}--------- beginning of crash01-01 12:00:00.918 1583 1583 E AndroidRuntime: FATAL EXCEPTION: main01-01 12:00:00.918 1583 1583 E AndroidRuntime: Process: com.google.android.setupwizard, PID: 158301-01 12:00:00.918 1583 1583 E AndroidRuntime: java.lan
文章浏览阅读916次,点赞16次,收藏19次。Java是一种简单、面向对象、分布式、稳健性、安全性、平台独立与可移植性、多线程、动态性的计算机编程语言。除了java还有很多编程语言:C语言、C++、C#、python等。不同的计算机编程语言语法不同;应用场景不同;Java是一种后端开发编程语言。开发流程:应用程序-》1、市场调研:用户的需求2、需求文档3、需求评审4、UI设计(提高用户体验)5、前端开发(利用前端技术实现网页,网页以浏览器直接打开\部署到浏览器,静态页面:数据不变)
文章浏览阅读848次,点赞13次,收藏17次。UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
文章浏览阅读182次。文章目录二维码工具类自定义dialog,加载自定义布局使用二维码工具类import java.awt.image.BufferedImage;import java.io.File;import java.util.HashMap;import java.util.Hashtable;import java.util.Map;import javax.imageio.ImageIO;import android.content.Context;import android.graphics_android zxing集成到 dialog
不同类型的光纤模块具有不同的数据传输速率、体积、功耗等特点,适用于不同的网络需求和环境。在众多光纤模块中,SFP、SFP+、SFP28、QSFP+和QSFP28是最常见的几种类型。SFP(Small Form Factor Pluggable)模块是一种小型可插拔的光纤模块,具有高速、高效率的特点。SFP+(Small Form Factor Pluggable Plus)模块是基于SFP模块的升级版,支持更高的数据传输速率,最高可达10Gbps。小巧灵活:SFP模块体积小巧,方便设备部署和更换。
文章浏览阅读1.4k次,点赞2次,收藏18次。文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论写在前面写作参考: robot L开源代码: 开源代码链接论文原文: 原文链接摘要SLAM是移动和空中机器人的一项基本任务_vil-slam
文章浏览阅读2.4w次,点赞14次,收藏46次。find命令最常用的是查找某个文件,如:find ./ -name "abc.txt"则会在当前目录及子目录下查找abc.txt文件更常用的是查找某一类型的文件,如:find ./ -name "*.txt"则会在当前目录及子目录下查找所有txt文件,但是如果要查找多种文件类型呢?比如某文件夹下面所有.c文件和.h文件,可以这样做:find ./ -name "*.[..._shell 同时查找两种结尾的配置文件
文章浏览阅读268次。(img-QrJpO645-1712860091908)]8、设置elasticsearch.service开机自动启动。10、查看elasticsearch.service运行状态。9、启动elasticsearch.service服务。7、使用yum安装elasticsearch。3、点击Downloads链接。5、查看yum安装方式。遇到一点意外,研究下先。4、点击左下角yum。
文章浏览阅读349次。String中的intern方法的实现原理(jdk8中):以下面代码为例public class InternTest{ String s1 = new String("a") + new String("b"); s1.intern(); String s2 = "ab"; System.out.println(s1 == s2);//true }(1)String s1 = new String(“a”) + new String(“b”);①创建StringBuilder对_string 的intern方法