- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Spring源码高频面试题及答案
1.说说SpringIOC容器的初始化核心流程,结合源码关键步骤
答案:SpringIOC容器初始化核心入口是AbstractApplicationContext的refresh()方法,关键步骤分5步:
刷新前准备:调用prepareRefresh(),初始化环境变量、验证必要配置(如context:property-placeholder配置的文件是否存在);
创建BeanFactory:执行obtainFreshBeanFactory(),如果是XmlWebApplicationContext会解析XML配置,把Bean定义封装成BeanDefinition存入DefaultListableBeanFactory的beanDefinitionMap(key是beanId,value是BeanDefinition);
BeanFactory预处理:prepareBeanFactory(beanFactory),注册内置Bean(如environment、systemProperties)、添加BeanPostProcessor(如ApplicationContextAwareProcessor);
执行BeanFactoryPostProcessor:invokeBeanFactoryPostProcessors(beanFactory),触发自定义或Spring内置的BeanFactoryPostProcessor(比如PropertyPlaceholderConfigurer,在这里替换配置文件中的${}占位符);
注册BeanPostProcessor:registerBeanPostProcessors(beanFactory),把所有BeanPostProcessor按优先级排序(如PriorityOrdered、Ordered),后续创建Bean时会按顺序执行它们的postProcessBeforeInitialization和postProcessAfterInitialization;
最后通过finishBeanFactoryInitialization(beanFactory)实例化所有非懒加载单例Bean。
2.Bean的完整生命周期里,初始化阶段有哪些关键回调?源码里是怎么调用的
答案:Bean初始化阶段(实例化+属性注入后)的核心回调分3类,源码入口在AbstractAutowireCapableBeanFactory的initializeBean()方法:
Aware接口回调:先执行invokeAwareMethods(beanName,bean),如果Bean实现了BeanNameAware、BeanFactoryAware、ApplicationContextAware,会依次调用setBeanName()、setBeanFactory()、setApplicationContext()(注意:ApplicationContextAware是通过ApplicationContextAwareProcessor的postProcessBeforeInitialization实现的,不在invokeAwareMethods里);
BeanPostProcessor前置处理:调用applyBeanPostProcessorsBeforeInitialization(bean,beanName),比如AutowiredAnnotationBeanPostProcessor在这里处理@Autowired字段的注入校验;
自定义初始化逻辑:先判断Bean是否实现InitializingBean,如果是则调用afterPropertiesSet();再检查是否配置了init-method(XML的init-method或@Bean(initMethod=)),如果有则反射调用该方法;
BeanPostProcessor后置处理:最后执行applyBeanPostProcessorsAfterInitialization(bean,beanName),AOP动态代理就是在这里生成代理对象(比如AnnotationAwareAspectJAutoProxyCreator会判断Bean是否需要被切面增强,需要则生成CGLIB/JDK代理)。
3.Spring怎么解决单例Bean的循环依赖?三级缓存分别存什么,为什么不能少
答案:Spring通过“三级缓存”解决单例循环依赖,核心是“提前暴露未初始化完成的Bean”,源码在DefaultSingleton
您可能关注的文档
- 《3-6岁儿童学习与发展指南》考试题库及答案.docx
- 《三毛流浪记》试题及答案.docx
- 《三毛流浪记》阅读测试题及答案.docx
- 《三字经》测试题及答案.docx
- 《万物简史》测试题及答案.docx
- 《一千零一夜》阅读测试题及答案.docx
- 《中华人民共和国安全生产法》考核试题及答案.docx
- 《中华人民共和国保守国家秘密法》试题题库及答案.docx
- 《中华人民共和国动物防疫法》试题及答案.docx
- 《中华人民共和国消防法》考试题及答案.docx
- 2025至2030全球及中国订单管理软件行业细分市场及应用领域与趋势展望研究报告.docx
- 2025至2030国内液晶显示屏行业市场发展分析及竞争策略与投资发展报告.docx
- 2025至2030港口设备市场前景分析及细分市场及应用领域与趋势展望研究报告.docx
- 2025至2030量子加密通信行业发展现状及投资前景战略报告.docx
- 2025至2030中国音乐合成器行业运营态势与投资前景调查研究报告.docx
- 2025至2030中国液压行业市场发展现状及竞争格局与投资机会报告.docx
- 2025至2030中国异戊橡胶行业运营态势与投资前景调查研究报告.docx
- 2025至2030帕西肽行业市场占有率及有效策略与实施路径评估报告.docx
- 2025至2030全球及中国超收敛集成系统行业细分市场及应用领域与趋势展望研究报告.docx
- 2025至2030尖齿铣刀行业市场占有率及有效策略与实施路径评估报告.docx
原创力文档


文档评论(0)