Spring 应用调试要点笔记

Spring Bean生命周期与配置解析
本文深入探讨Spring框架中Bean的生命周期,包括Bean定义注册、实例化和配置类处理等关键阶段。同时,分析了DispatcherServlet如何选择HandlerMapping组件处理Web请求。

bean生命周期相关

  1. 适合观察bean定义注册到容器的断点位置
	// package org.springframework.beans.factory.support;
	// class DefaultListableBeanFactory  
	// 观察方法 : 	
	public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)	{
		// ...
	}
  1. 适合观察从容器获取bean实例的断点位置
	// package org.springframework.beans.factory.support;
	// class AbstractBeanFactory
	// 观察方法 : 	
	protected <T> T doGetBean(final String name, @Nullable final Class<T> requiredType,
			@Nullable final Object[] args, boolean typeCheckOnly) throws BeansException	{
		// ...
	}
  1. 适合观察容器创建bean实例的断点位置
	package org.springframework.beans.factory.support;
	// class AbstractAutowireCapableBeanFactory (继承自 AbstractBeanFactory )
	// 观察方法 : (针对单例bean,非单例bean都适用)
	protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)
			throws BeanCreationException {
		// ...
	}

配置类处理相关

  1. 适合观察一组配置类中的bean定义被注册到容器的断点位置
	// package org.springframework.context.annotation
	// class ConfigurationClassBeanDefinitionReader
	// 观察方法 :
	public void loadBeanDefinitions(Set<ConfigurationClass> configurationModel){
		// ...
	}

Spring Web MVC

  1. 观察DispatcherServlet处理某个请求最终采用的HandlerMapping组件
	// package org.springframework.web.servlet
	// class DispatcherServlet
	// 观察方法 :
	protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
		// 属性 this.handlerMappings 指向所有运行时被采用的 HandlerMapping 组件 bean,
		if (this.handlerMappings != null) {
			for (HandlerMapping mapping : this.handlerMappings) {
				// 在这里打断点可以观察 :
				// 1. 每个 HandlerMapping 跟请求 request 是如何进行匹配的
				// 2. HandlerExecutionChain 对象如何构建,都包含什么,和一个 handler 是什么关系
				HandlerExecutionChain handler = mapping.getHandler(request);
				if (handler != null) {
					return handler;
				}
			}
		}
		return null;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值