Spring 使用已经有些年头了,但始终没有静下心来整理 Spring,关于 Spring 各种实现方式也都是大而概之的了解,也没有深入的研究。今天终于鼓起勇气来整理他了。
万事开头难,从哪里开始呢,那就从常用的 Factory 开始吧。
在日常的使用中,比较少的直接使用 BeanFactory,常用是 ApplicationContext 接口。下面我们就以FileSystemXmlApplicationContext 为例,开始梳理 Spring 中的依赖注入的知识。
首先看看 FileSystemXmlApplicationContext 实现了那些接口、继承了那些基类:
上图可以说明 FileSystemXmlApplicationContext 是一个具有完整功能的 BeanFactory,直接可以被客户使用。可以把它分为两部分接口的体现,一方面是 BeanFactory ,另一方面是 ResourceLoader 。前者使其具体 Factory 的相关功能,后者使其具体资源加载的功能。我们在日常中常用的 ApplicationConext 接口是继承与 BeanFactory 的,FileSystemXmlApplicationContext 也实现了这个接口。
下面我们分析一下其构造器源码:
// 默认构造器
public FileSystemXmlApplicationContext() {
}
// 指定了父容器的构造器
public FileSystemXmlApplicationContext(ApplicationContext parent) {
super(parent);
}
// 指定单个的配置文件位置构造器
public FileSystemXmlApplicationContext(String configLocation) throws BeansException {
this(new String[] {configLocation}, true, null);
}
// 指定多个配置文件位置构造器,默认需要刷新容器
public FileSystemXmlApplicationContext(String... configLocations) throws BeansException {
this(configLocations, true, null);
}
// 指定了配置文件和父容器的构造器,默认需要刷新容器
public FileSystemXmlApplicationContext(String[] configLocations, ApplicationContext parent) throws BeansException {
this(configLocations, true, parent);
}
// 指定了配置文件位置以及是否需要刷新的构造器
public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh) throws BeansException {
this(configLocations, refresh, null);
}
// 核心构造器,设置了Bean配置文件位置、是否需要刷新容器、父容器的构造器
// 如果配置了需刷新容器,则调用刷新接口。
// refresh方法是由AbstractApplicationContext提供,后面的笔记中应该相信说明这方法(后续附上链接)
public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
throws BeansException {
super(parent);
setConfigLocations(configLocations);
if (refresh) {
refresh();
}
}
FileSystemXmlApplicationContext 定义是很简单,他其中关于 Bean 的资源查找、解析、注册都有其父类完成。
Spring 中关于资源的查找是很大一部分内容,这部分功能大部分是依赖 DefaultResourceLoader 的实现,下次主要说明 Spring 是如何加载资源文件的。
相关推荐
#1,Spring-Kapcb Spring基础原理以及整合SpringMVC以及MyBatis学习 #2,前言 记录自己关于Spring的学习... Spring IoC Spring-Kapcb-IoC Spring IoC Bean Spring-Kapcb-IoC-Bean Spring整合MyBatis Spring-K
在主程序`MainStart.java`中,通过`AnnotationConfigApplicationContext`获取`Car` Bean的实例,展示了如何从Spring容器中获取并使用Bean。 理解Spring IoC的源码实现对于Java开发者至关重要,它能帮助我们更深入地...
Spring 是一个整体的IoC(Inversion of Control)/DI(Dependency Injection)容器,为各种组件提供基础。 Spring Boot 中的 Starter 是预先配置的依赖集合,如 `spring-boot-starter-data-jpa` 用于集成JPA。常用...
本文将从Spring的核心概念、IoC(控制反转)和AOP(面向切面编程)等方面进行深入探讨,旨在帮助初学者快速入门Spring IO。 1. Spring框架概述 Spring是一个全面的Java企业级应用开发框架,它提供了从数据访问到...
在这个“spring练习AOP与IOC”的主题中,我们将深入探讨这两个关键概念。 **依赖注入(IOC)** 依赖注入是Spring框架的基础,它是一种设计模式,允许对象在运行时通过外部源获取其依赖,而不是自行创建或查找。...
### Spring框架中的IoC(控制反转) 在现代软件开发中,特别是Java企业级应用领域,Spring框架因其灵活性、模块化及强大的功能支持而备受青睐。其中一个重要特性是控制反转(Inversion of Control, IoC),它是一种...
* Spring fundamentals: Spring IoC container, Spring AOP/ AspectJ, and more * Spring enterprise: Spring Java EE integration, Spring Integration, Spring Batch, jBPM with Spring, Spring Remoting, ...
### Spring 容器触发事件与 ClassPathXmlApplicationContext 的 start() 方法用法详解 #### 一、Spring 容器概述 Spring 框架是 Java 开发领域中非常流行的一个轻量级框架,它主要提供了依赖注入(DI)和面向切面...
《Spring Persistence:A Running Start》一书深入探讨了如何在Spring框架中实现持久化操作,为读者提供了从理论到实践的全面指南。本书通过详细解释Spring框架与持久化技术的结合,帮助开发者理解和掌握如何利用...
"daas-start-kit" 是一个基于 React 和 Java 技术栈的低代码开发工具,旨在提供代码和数据的云端生成能力,同时支持本地部署。该平台特别设计了手写代码和生成代码的目录分离,以适应专业开发人员的需求,帮助他们...
- **start.spring.io**:一个在线工具,用于生成Spring Boot项目的初始代码骨架。 - **入门指南**:提供了一系列指导教程,帮助开发者快速理解和应用Spring Boot及其他Spring生态系统中的项目。 #### 四、Spring...
作者可能已经创建了一个简单的数据访问层,使用Spring.NET的IoC容器来注入数据库连接或者DAO(数据访问对象)。 最后,Spring.NET还包括对企业服务的支持,如邮件服务、缓存管理等。作者可能尝试实现了一个简单的...
在实际项目中,我们可以根据需求定义各种复杂的任务执行计划,同时利用Spring的IoC和AOP特性,使代码更加简洁和可维护。无论是在大型企业级应用还是小型项目中,Spring Quartz都是一个值得信赖的定时任务解决方案。
Quartz与Spring的集成使得我们可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性来管理任务。这篇博文主要探讨了如何在Spring应用中配置和使用Quartz。 首先,我们需要...
Spring Quartz是Spring框架与Quartz任务...结合Spring的IoC和AOP特性,可以轻松地管理和扩展定时任务,同时降低了Quartz的使用门槛。在实际项目中,确保选择合适的Quartz版本,并合理配置,以适应项目的需求和规模。
在IntelliJ IDEA中,可以通过访问<https://start.spring.io/>来初始化项目。配置项目的基本信息,选择所需的Starter依赖,比如Spring Web和Spring Data JPA、MyBatis等。 **2. 设计数据库表** 在本例中,我们将...
控制反转(Inversion of Control, IOC)是Spring框架的核心特性之一,它改变了以往程序中的对象创建和管理方式。在传统的编程模式下,对象间的依赖关系是由对象自身管理的,而在Spring框架中,这种依赖关系被转移到了...