最近在看spring的源码,担心忘掉了,打个记号,也请大家一起指正其中的错误,防止走歪路。
从xml配置文件加载入手
xml配置文件加载由
org.springframework.context.support.ClassPathXmlApplicationContext完成,该类的继承关系如下:
实际调用:
AbstractApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"}); PersonService service = (PersonService)context.getBean("personService");
Beans.xml加载在创建ClassPathXmlApplicationContext实例时完成,上面调用方法仅仅是ClassPathXmlApplicationContext构造函数之一。
该构造函数调用具体内部步骤如下:
1. 创建PathMatchingResourcePatternResolver实例,该实例用于后续将文件路径解析为资源对象。
2. 处理参数中传入的路径数组:去掉每个路径的前后空格
3. 调用refresh()刷新实例容器(Context),refresh方法定义在ClassPathXmlApplicationContext的父类:AbstractApplicationContext.
refresh()包括刷新前准备,获取bean工厂实例,bean工厂使用前配置,加载bean定义文件(这里是xml,但没有初始化bean实例),初始化bean实例,初始化消息资源,初始化事件处理器,初始化生命周期依赖的bean,附加的刷新,注册监听实例,完成beanFactory初始化,完成刷新。当然如果出现异常需要回滚刷新并删除所有的bean实例。
获取bean工厂实例:刷新工厂(刷新前准备、删除Context中所有的bean实例,关闭原beanFactory,
重新获取beanFactory实例,自定义beanFactory实例配置(目前默认实现为空),加载bean配置文件)
获取beanFactory:
DefaultListableBeanFactory beanFactory = createBeanFactory(); customizeBeanFactory(beanFactory);
加载bean定义的xml文件
protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws IOException { // Create a new XmlBeanDefinitionReader for the given BeanFactory. XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory); // Configure the bean definition reader with this context's // resource loading environment. 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); }
相关推荐
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
总之,Spring源码学习是一个深化编程技能,理解设计模式,以及提高问题解决能力的过程。通过深入研究,程序员不仅可以优化自己的代码,还能更高效地利用Spring框架提供的功能,提升项目的可维护性和扩展性。
马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...
这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...
### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...
学习Spring源码不仅可以深入理解其工作原理,还可以提升自己的编程技能和设计思维。通过阅读源码,开发者可以了解如何实现DI和AOP,以及Spring如何优雅地管理对象和处理各种框架的集成。对于初入IT行业的人员来说,...
本学习笔记提供了丰富的源码示例,帮助读者更好地理解和应用Spring框架。 首先,需要明确Spring是一个开源框架,它旨在简化Java EE(现在称为Jakarta EE)的开发。Spring框架的核心是提供了一个轻量级、解耦的容器...
在《Spring Boot》源码学习笔记中,我们可以深入理解其内部工作机制,包括自动配置、起步依赖、命令行接口(CLI)以及如何集成各种组件如JSP等。JSP(JavaServer Pages)是一种用于动态创建网页的技术,Spring Boot ...
Spring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).doc
本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...
这份源码学习笔记以SpringFramework 5.0.x版本为核心,详细地记录了通过debug方法学习Spring框架中的两个核心特性:控制反转(IoC)和面向切面编程(AOP)的实现原理。 首先,要学习Spring Framework 5.0.x的源码,...
马士兵Spring课堂笔记(超级详细版) 本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring...
本笔记将深入探讨Spring的源码学习,重点理解其核心组件和生命周期。 首先,Spring通过反射机制来实例化对象。在Java中,我们可以使用`Class.forName()`方法根据完全限定类名获取类对象,或者通过已有对象的`...
这个"spring学习笔记,包括源码学习"的资料很可能包含了一系列关于Spring框架的核心概念、配置、使用方法以及深入源码的解析。 首先,让我们来了解一下Spring框架的基础知识。Spring的核心特性是依赖注入,它允许...
"Spring笔记示例源代码"这个资源很可能是为了帮助学习者深入理解Spring框架的各种功能和用法而提供的实际代码示例。 1. **Spring IoC**:IoC是Spring的核心特性,它将对象的创建和管理权交给Spring容器,使得开发者...
Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建企业级应用程序...以上是Spring5源码分析笔记中的主要知识点,深入学习这些内容将有助于开发者更好地理解和利用Spring框架,从而提高开发效率和应用质量。
《Spring技术内幕 学习笔记》是一份深入探讨Spring框架核心机制的学习资料,结合作者zzc1684在iteye博客上的博文,我们可以从中学习到Spring框架的多个重要知识点。Spring作为Java企业级应用开发的基石,其设计思想...
个人学习spring框架时记录的笔记,纯手敲,SpringIOC+SpringMVC学习笔记,有兴趣的可以参考
NULL 博文链接:https://linres.iteye.com/blog/281221
Spring核心源码解析——学习笔记