Spring5源码解析-Bean的初始化

spring-5.2.5.RELEASE-dist.zip spring框架jar包,专门用于spring的开发,版本为 5.2.5.东西还是不错的。现在很多人都能用到 立即下载

Spring5源码解析-Bean的初始化
1.工程搭建
在spring-beans工程上添加测试代码
目录结构:
在这里插入图片描述
在这里插入图片描述
java类源码:
/**

  • @author wufei
  • @create 2019-02-15 9:08
    **/
    public class MyTestBean {
    private String testStr = “testStr”;
    public String getTestStr() {
    System.out.println(“执行getTestStr方法”);
    return testStr;
    }
    public void setTestStr(String testStr) {
    this.testStr = testStr;
    }
    }

public class BeanFactoryTest {
@Test
public void test(){
System.out.println(“exec”);
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(“wftest.xml”, getClass()));
MyTestBean myTestBean = (MyTestBean) beanFactory.getBean(“myTestBean”);
myTestBean.getTestStr();
}
}
xml配置文件:
在这里插入图片描述
运行
在这里插入图片描述
2.功能分析
spring帮我们完成了什么工作呢? 大胆的猜想阅读源码。
1.读取配置文件(wftest.xml)
2.根据配置文件中的配置找到对应的类的配置,并实例化。
3.调用实例化后的实例。
3.核心类介绍
spring核心的两个类
1.DefaultListableBeanFactory
在这里插入图片描述
2. XmlBeanDefinitionReader
在这里插入图片描述
源码解析:
对xml的配置文件的解析
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(“wftest.xml”, getClass()));

bean的加载
MyTestBean myTestBean = (MyTestBean) beanFactory.getBean(“myTestBean”);
bean的创建

spring如何解决循环依赖

依赖处理:
在Spring中会有循环依赖的情况,例如:当A中含有B中的属性,B中有含有A的属性时就构成一个循环依赖,此时如果A和B都是单例,那么在Spring中的处理方式就是当创建B的时候,涉及自动注入A的步骤时,并不是直接去再此创建A,而是通过放入缓存中的ObjectFactory来创建实例,这样就解决了循环依赖的问题。(在spring中解决循环依赖只对单例有效)

spring实例化

Spring 源码分析(Bean的初始化) Spring 源码分析(Bean的初始化) 前言 本篇文章是个人第一次看spring源码并总结,同时也参考了下面这篇博客。基本也是按照他的思路来理解的。这也算是第一版个人简易理解。也算是窥见spring的冰山一角,之后也会继续阅读下去。望各位多多支持。 本片博文如有错误之处,还请多多指正,共同学习。 博文直接从ClassPathXmlApplicationContext开始分析,后续会总结基于注解的AnnotationConfigApplicationContext来分析 spring-ioc javadoop Bean的初始化 } level; then parses the contain 立即下载

相关推荐

车载以太网SOMEIP入门必看:从服务发现到事件订阅,一次搞懂三种核心通信模式(附报文实例)

本文深入解析车载以太网SOME/IP的三种核心通信模式:服务发现、方法调用和事件订阅,通过真实报文实例和仿真工具演示,帮助开发者快速掌握这一关键技术。文章特别强调服务发现机制的基础作用,并详细介绍了Request/Response与Fire&Forget两种方法调用模式的应用场景,为智能汽车网络通信开发提供实用指南。

weixin_30955617的博客 112

spring boot重写addInterceptors()方法配置拦截器

spring boot抛弃了复杂的xml配置,我们可以自定义配置类(标注@Configuration注解的类)来实现WebMvcConfigurer接口,并重写addInterceptors()方法来配置拦截器

想好了就去做吧 即便失败了 至少这条路上留下了你的脚印 3万+

机器学习系列(1)_逻辑回归初步

1、总述 逻辑回归是应用非常广泛的一个分类机器学习算法,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测。 2、由来     要说逻辑回归,我们得追溯到线性回归,想必大家对线性回归都有一定的了解,即对于多维空间中存在的样本点,我们用特征的线性组合去拟合空间中点的分布和轨迹。如下图所示:     线性回归能对连续值结果进行预测,

寒小阳 13万+

Spring5创建bean的源码解析(一)整体流程

代码环境: SpringBoot 2.1.8 + Spring 5.1.9 简单分析下在SpringBoot中Spring5创建bean的过程 1. 通过main函数的run方法进入到SpringApplication.java public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); Configura.

万般皆苦,唯有自渡 365

微信H5网页授权通用方案:中转页破解域名限制,适配Hash/History路由

在Web开发中,OAuth 2.0授权码模式是实现第三方登录的通用标准,其核心原理是通过授权服务器颁发临时代码,再由客户端交换访问令牌。这一机制在微信公众号H5开发中尤为重要,用于安全获取用户身份。然而,微信平台对网页授权回调域名有严格的数量限制,这成为多子域名、多环境及微前端架构下业务扩展的主要瓶颈。其技术价值在于通过设计一个统一的中转授权页,将授权逻辑与业务逻辑解耦,让所有业务页面共享一个已配置的授权入口,从而突破域名配额限制。该方案的关键在于适配不同的前端路由模式,需精准处理Hash模式与Histor

weixin_42533120的博客 324

CMap与L1000技术解析:基因表达数据在药物发现中的应用

本文深入解析了CMap(连接图)与L1000技术在药物发现中的核心应用。CMap通过构建基因表达“关系网”,实现基于模式匹配的药物重定位;L1000技术则以低成本、高通量方式生成关键基因表达数据,支撑了LINCS超级数据库。文章以CLUE平台为例,手把手演示了如何利用疾病基因表达签名逆向筛选潜在治疗化合物,并拓展了其在解析药物机制、预测副作用等多场景下的价值。

weixin_29207533的博客 728

Spring源码解析二十七(bean的初始化)

前面我们已经了解了Spring如何为bean填充属性,而且,在属性填充时还涉及到三种自动装配模式,分别是根据名称、类型以及构造方法来自动装配bean的属性。完成bean属性装配之后,接下来就要开始bean的初始化了。

qq_35873436的博客 865

Android 11系统定制:如何彻底隐藏状态栏电池图标(RK3568实测)

本文详细解析了在Android 11系统上如何通过多维度修改实现状态栏电池图标的彻底隐藏,特别针对RK3568平台提供了实战指南。从系统UI架构解析到核心配置文件修改,再到进阶技巧与疑难排查,帮助开发者深度定制Android系统,满足特定场景需求。

weixin_29250573的博客 379

Spring源码:Bean的初始化

前言 Spring中Bean的实例化和初始化都是在doCreateBean中实现的。实例化操作是在createBeanInstance(beanName, mbd, args)方法中实现的。在实例化后会生成一个BeanWrapper对象,这个对象是bean的修饰对象。而进行bean初始化的功能主要是在**populateBean(beanName, mbd, instanceWrapper)**和 **initializeBean(beanName, exposedObject, mbd)**中完成的。po

weixin_51110958的博客 862

你以为你懂 Java 反射?看了这篇源码分析,我发现我以前都错了

摘要:本文讲述了一次生产环境Metaspace内存溢出的故障排查经历。事故源于一个通用数据导出功能中频繁使用反射调用method.invoke(),触发了JVM的"膨胀机制":当同一Method对象调用超过15次时,JVM会动态生成GeneratedMethodAccessor类,导致Metaspace被撑爆。文章分析了问题根源在于循环中反复调用getMethods()创建新Method对象,并提出了三种解决方案:缓存Method对象、改用MapStruct/MethodHandle工具

BUG猿的博客 770

某Z节验证码

某Z节验证码、captchaBody、滑块、旋转、空间推理

mamenqi_csdn的博客 773

Spring源码深度解析-初始化bean

目录1、Spring初始化bean2、BeanFactory的初始化Bean2.1 BeanFactory接口和ApplicationContext接口2.2 BeanFactory的初始化Bean2.3 Spring的Aware接口2.4 BeanPostProcessor所有bean的后置处理器2.4 InitializingBean接口和init-method属性2.5 BeanPostPr...

u010327957的博客 999

Ascend开发包Acllite安装

设置环境变量,配置程序编译依赖的头文件,库文件路径。“$HOME/Ascend”请替换“Ascend-cann-toolkit”包的实际安装路径。将YOLOV7原始模型转换为适配昇腾310处理器的离线模型(*.om文件),放在model路径下。运行完成后,会在样例工程的out目录下生成推理后的图片,显示对比结果如下所示。可以使用以下两种方式下载,请选择其中一种进行源码准备。请从以下链接获取该样例的输入图片,放在data目录下。执行以下命令,执行编译脚本,开始样例编译。执行运行脚本,开始样例运行。

如果想成为中心,那么就到中心去吧。 319

spring ioc容器创建与bean初始化源码解析5:初始化所有剩余未初始化的单实例bean及最终完成容器创建

11. finishBeanFactoryInitialization(beanFactory); 初始化所有剩下的(因为之前的BeanPostProcessor Bean可能已经在前面初始化了)单实例bean; // Instantiate all remaining (non-lazy-init) singletons. finishBeanFactoryInitialization...

u013905744的专栏 647

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

spring5 源码深度解析----- IOC 之 bean 的初始化

一个 bean 经历了createBeanInstance()被创建出来,然后又经过一番属性注入,依赖处理,历经千辛万苦,千锤百炼,终于有点儿 bean 实例的样子,能堪大任了,只需要经历最后一步就破茧成蝶了。这最后一步就是初始化,也就是initializeBean(),所以这篇文章我们分析doCreateBean()中最后一步:初始化 bean。我回到之前的doCreateB...

weixin_30294709的博客 129

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Spring容器初始化后实例化单例bean过程源码解析 5.1.3.RELEASE版本】

这篇文章将对Spring容器初始化后,对非懒加载的单例bean实例化过程进行源码解析,首先对SpringBean的生命周期进行详细的解释,包含一些用到的方法及其所在类,然后再进行源码的解析。

hha的博客 1347

spring5源码解析——第三部分

spring5源码分析第三部分

dragondevil1的博客 761

学习spring源码-可参考的资料

剑指Spring源码(二) https://www.cnblogs.com/codebear/p/10374261.html 使用idea和gradle编译spring5源码https://blog.youkuaiyun.com/baomw/article/details/83956300 介绍这两篇文章的,是这个视频:程序员进阶教程-带你深入了解Bean https:...

weixin_30348519的博客 100

Spring5源码解析——第二部分

spring源码的第二部分

dragondevil1的博客 416

Spring容器初始化源码解析

为什么在这能够将AnnotationConfigApplicationContext对象作为BeanDefinitionRegistry 传入,回头看一下继承关系那张图,AnnotationConfigApplicationContext继承了BeanDefinitionRegistry,并且最终实现了接口BeanFactory,BeanFactory可以说是Spring中的顶层类,它是一个工厂,能够产生bean对象,提供了一个非常重要的方法getBean,会在后面讲到。

m0_69632475的博客 1054

Spring Bean生命周期源码分析

剑指Spring源码 本文使用的Spring版本为5.1.2,现在JavaConfig风格+注解的方式来使用Spring是Spring官方主推的,也是现在的主流方式,所以我们从这里出发: import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class App { ...

微光的博客 1348

Spring5源码解析——第一部分

本文从spring启动方法中开始一步步揭开spring的面纱,蹭蹭递进,逻辑清晰,附带源码注释,帮助大家更好的理解。

dragondevil1的博客 1060

Spring 5.2.9 07 源码分析-spring的bean工厂准备工作(上)

Spring 5.2.9 spring的bean工厂准备工作

weixin_50750933的博客 201

Spring 5 源码解析 —— Spring 中的应用上下文详解

Spring ApplicationContext是Spring框架的核心IoC容器,负责Bean的实例化、配置和组装。其核心refresh()方法包含了12个关键步骤:准备刷新、获取BeanFactory、准备BeanFactory、调用后处理器、注册监听器等。AbstractApplicationContext作为抽象基类,使用模板方法模式定义了容器初始化的标准流程,子类如ClassPathXmlApplicationContext和AnnotationConfigApplicationContext可

油墨香^-^的博客 1042

Spring Bean作用域与生命周期全解析

这就像是往杯子倒水一样1.买个杯子2.可以对杯子进行染色等的一些属性操作3. 可以往杯子里放东西了4.接下来就是使用杯子了5.用完杯子我可以把它扔了或者卖了。

2402_87239469的博客 1480

Spring ApplicationContext 高级容器源码解析

这里我们来看一下这个beanDefinition是怎么加载到BeanFactory里面的。//加载所有的bean定义配置进入loadBeanDefinitions()方法。@Override//1. 将beanFactory传进去创建一个xml的bean定义读取器,负责读取xml中的bean定义//2. 设置当前的环境信息到读取器里//3. 将当前这个资源加载器,也就是ApplicationContext设置进去//4. 设置实体解析器,将xml最终解析为一些实体。

MaginaD的博客 1237
上一篇: Spring5源码解析-搭建环境
下一篇: 手把手教你流行抓包工具Charles
wflovejava
博客等级 码龄11年 23粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值