当前位置: 首页 > java >正文

Spring生命周期及关联面试题

一、springbean的生命周期?

阶段核心接口和实现类详细步骤和描述
1、读取并解析配置元信息到BeanDefinition

BeanDefinitionReader—>XmlBeanDefinitionReader #loadBeanDefinitions()读取的源:

XML配置bean
注解声明的bean
package扫描、classpath、Groovy文件、properties文件
BeanDefinition->GenericBeanDefinition存储bean的定义信息
2、BeanDefinition注册BeanDefinitionRegistry->DefaultListableBeanFactory#registerBeanDefinition()存入DefaultListableBeanFactory的beanDefinitionMap<String,BeanDefinition>
3、bean实例化1、AbstractBeanFactory#getMergedLocalBeanDefinition()

1、BeanDefinition合并;

2、加载bean对应的class类;

1、读取配置源到BeanDefinition

1)具体源码见:

Spring源码-读取XML文件配置信息-CSDN博客文章浏览阅读176次。4、parseBeanDefinitionElement()方法:解析到BeanDefinitionHolder,BeanDefinitionHolder.getBeanDefinition()就得到BeanDefinition。3、registerBeanDefinitions方法调用parseBeanDefinitions方法进行bean标签doc元素解析。2、doLoadBeanDefinitions()方法:1)读取到Doc里面;2)解析Doc注册为BeanDefinition。https://blog.csdn.net/qq_19952029/article/details/140500505

2)从XML源构建BeanDefinition示例:

/*** xml方式bean配置信息解析*/
@Test
public void test1() {//定义一个spring容器,这个容器默认实现了BeanDefinitionRegistry,所以本身就是一个bean注册器DefaultListableBeanFactory factory = new DefaultListableBeanFactory();//定义一个xml的BeanDefinition读取器,需要传递一个BeanDefinitionRegistry(bean注册器)对象XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(factory);//指定bean xml配置文件的位置String location = "classpath:/com/javacode2018/lesson002/demo2/beans.xml";//通过XmlBeanDefinitionReader加载bean xml文件,然后将解析产生的BeanDefinition注册到容器容器中int countBean = xmlBeanDefinitionReader.loadBeanDefinitions(location);System.out.println(String.format("共注册了 %s 个bean", countBean));//打印出注册的bean的配置信息for (String beanName : factory.getBeanDefinitionNames()) {//通过名称从容器中获取对应的BeanDefinition信息BeanDefinition beanDefinition = factory.getBeanDefinition(beanName);//获取BeanDefinition具体使用的是哪个类String beanDefinitionClassName = beanDefinition.getClass().getName();//通过名称获取bean对象Object bean = factory.getBean(beanName);//打印输出System.out.println(beanName + ":");System.out.println("    beanDefinitionClassName:" + beanDefinitionClassName);System.out.println("    beanDefinition:" + beanDefinition);System.out.println("    bean:" + bean);}
}

2、BeanDefinition注册

1)注册器BeanDefinitionRegistry接口的唯一实现类:DefaultListableBeanFactory

2)将BeanDefinition放到beanDefinitionMap。


@SuppressWarnings("serial")
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactoryimplements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
@Overridepublic void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)throws BeanDefinitionStoreException {Assert.hasText(beanName, "Bean name must not be empty");Assert.notNull(beanDefinition, "BeanDefinition must not be null");if (beanDefinition instanceof AbstractBeanDefinition) {try {((AbstractBeanDefinition) beanDefinition).validate();}catch (BeanDefinitionValidationException ex) {throw new BeanDefinitionStoreException(beanDe
http://www.xdnf.cn/news/13725.html

相关文章:

  • 25.6.12学习总结
  • 强化微调技术与GRPO算法(1):简介
  • 如何选择适合自己需求的PCB厚板厂家?
  • Windows桌面图标修复
  • 基于NSGA2的柔性作业车间调度
  • 【React】使用 useContext + useReducer 实现一个轻量的状态管理库
  • 大模型Prompt|提示工程的10个常见设计模式
  • Kubernetes安全机制深度解析(二):从身份认证到资源鉴权
  • 埃隆·马斯克宣布特斯拉Robotaxi自动驾驶出租车服务将于6月22日在奥斯汀“试运行”启动
  • Rust入门之并发编程基础(二)
  • Redis 安装实践:基于鲲鹏 ARM 架构 Ubuntu 环境
  • 【Linux网络篇】:TCP协议全解析(一)——从数据段格式到可靠传输的三大基石
  • GitHub Desktop Failure when receiving data from the peer
  • Facebook的速推帖子有用吗?
  • 补充讲解perfetto/systrace的CPU Trace信息详解和抓取方法
  • 深度学习:张量标量概念、PyTorch张量创建、类型转换等
  • C 语言之 循环
  • mvc与mvp
  • Oracle DG库手动注册归档日志的两种方法
  • 单链表经典算法题之分割链表
  • 操作系统——第五章(I/O设备)
  • 【AUTOSAR COM Eth】Service Discovery (SD) 模块技术解析
  • 面试遇到的商城项目相关问题总结
  • 【Python基础】Python中字典知识点梳理
  • 预训练CNN网络的迁移学习(MATLAB例)
  • 在线机考|2025年华为暑期实习春招秋招编程题(最新)——第1题_物流运输
  • 【leetcode】104. 二叉树的最大深度
  • Spring上下文模块设计
  • 高防IP是怎么防御的?高防IP的防御步骤又有哪些?
  • SKE 与 SM2、SM3、SM4 的关系 ,SPDM协议的详细解析