2024年最全SpringIOC源码解析(7)—— xml配置的资源定位、加载,kafka原理面试题

最后

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例

MyBatis答案解析
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

大家看完有什么不懂的可以在下方留言讨论也可以关注。

觉得文章对你有帮助的话记得关注我点个赞支持一下!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {

refreshBeanFactory();

return getBeanFactory();

}

再往前进会发现实现refreshBeanFactory方法的是AbstractRefreshableApplicationContext类:

请添加图片描述

先创建了容器实例,再将实例传入到loadBeanDefinitions

进入到loadBeanDefinitions,该方法是由AbstractXmlApplicationContext实现的:

protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {

// Create a new XmlBeanDefinitionReader for the given BeanFactory.

// 为给定的BeanFactory创建一个新的XmlBeanDefinitionReader

XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);

// Configure the bean definition reader with this context’s

// resource loading environment.

beanDefinitionReader.setEnvironment(this.getEnvironment());

// 将容器本身"献祭"

beanDefinitionReader.setResourceLoader(this);

beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));

// Allow a subclass to provide custom initialization of the reader,

// then proceed with actually loading the bean definitions.

initBeanDefinitionReader(beanDefinitionReader);

loadBeanDefinitions(beanDefinitionReader);

}

请添加图片描述

先是定义了XmlBeanDefinitionReader的实例变量beanDefinitionReader,变量的构造函数便是传入的DefaultListableBeanFactory实例;

此外beanDefinitionReader还给自己的ResourceLoader设置上FileSystemXmlApplicationContext;

因此FileSystemXmlApplicationContext实例和DefaultListableBeanFactory实例便是通过beanDefinitionReader对象串联到了一起,这也就表明了打通了资源加载和BeanDefinition之间的通路。

再前进一步就是加载资源的配置流程了(AbstractXmlApplicationContext.java):

protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws BeansException, IOException {

Resource[] configResources = getConfigResources();

if (configResources != null) {

reader.loadBeanDefinitions(configResources);

}

String[] configLocations = getConfigLocations(); // 从这里继续进

if (configLocations != null) {

reader.loadBeanDefinitions(configLocations);

}

}

进入到getConfigLocations方法里:

@Override

public int loadBeanDefinitions(String… locations) throws BeanDefinitionStoreException {

Assert.notNull(locations, “Location array must not be null”);

int count = 0;

for (String location : locations) {

count += loadBeanDefinitions(location);

}

return count;

}

这里就是根据location来逐个调用loadBeanDefinitions去加载。

继续进到loadBeanDefinitions方法里:

请添加图片描述

可以看到确实是使用了ResourcePatternResolver来进行加载的,和上面的推断一样是用可以同时加载多个资源的。

再进入两层到loadBeanDefinitions方法里:

请添加图片描述

发现到了对resource包裹上EncodedResource这一步

再进入一层,此时就是对资源进行编码处理了:

请添加图片描述

进入到实际干活的doLoadBeanDefinitions中:

请添加图片描述

这里面主要就是将xml解析成document对象了,解析完成之后就进入到注册阶段

最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

image

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值