最后
在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
大家看完有什么不懂的可以在下方留言讨论也可以关注。
觉得文章对你有帮助的话记得关注我点个赞支持一下!
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高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。
请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析