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
This document assumes at least a general familiarity with the Spring IoC container. If you are brand new to Spring (i.e.: have never used Spring's XML configuration language, it is suggested that you ...
Spring fundamentals: Spring IoC container, Spring AOP/ AspectJ, and more. Spring enterprise: Spring Java EE integration, Spring Integration, Spring Batch, Spring Remoting, messaging, transactions, and...
* 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, ...
The recipes in Spring 5 Recipes cover Spring fundamentals such as Spring IoC container, Spring AOP/ AspectJ, and more. Other recipes include Spring enterprise solutions for topics such as Spring Java ...
The recipes in Spring 5 Recipes cover Spring fundamentals such as Spring IoC container, Spring AOP/ AspectJ, and more. Other recipes include Spring enterprise solutions for topics such as Spring Java ...
在Step3到Step5的例子中,我们将利用Spring.net提供的Ioc框架,轻松完 成解耦以及系统改造等工作。 一、类之间的依赖 我们的第一个例子主要用于说明程序的基本构造,并且作为一个反面典型,引出为什么要解耦,以及...
// start your journey in Trinity // you can check the demo under example folder 概述 声明性路由器 IOC容器和依赖注入 定制中间件 定制运行时(跟踪分析,用户身份验证,事件总线...) 支持原子请求 支持...
[Spring] - 用于管理 bean 的 ioc 容器。 [MySQL] - 世界上最流行的开源数据库。 [MongoDb] - 是一个开源文档数据库,也是领先的 nosql 数据库。 MongoDB 设置 ActiveMQ 下载分发: : 解压到任意文件夹 开放...
Java面试的10个问题 请你简述Java框架集合相关...谈谈你对spring IOC和DI的理解,它们有什么区别? Thread 类中的start() 和 run() 方法有什么区别? 解释一下java.io.Serializable接口。 Error和Exception的区别。
使用Typescript的装饰器实现IOC和AOP。 文献资料 (进行中 :flexed_biceps: ) [koatty_doc_EN]即将推出... 安装 npm i -g koatty_cli 快速开始 1.创建项目 koatty new projectName cd ./projectName yarn ...
Jetty Start.jar 配置Jetty 如何设置上下文(Context Path) 如何知道使用了那些jar包 如何配置SSL 如何使用非root用户监听80端口 如何配置连接器(Connectors) 如何配置虚拟主机(Virtual Hosts) 如何配置会话ID...
基于 的一个模仿spring的IOC风格的koa后端node服务模板 旨在快速方便的搭建出一个面向切面编程(AOP)的 node web 应用模板,不过度封装,接近原生。 inversify的中文文档: 开发目的 遵循 原则的代码。 鼓励和促进...
spring.ioc包; (有问题.............待解决.........) struts和Ajax: (例子一) 载入了json包; strutsandajax包; 可以直接运行jsonplugsm.action,出现下载的, 可以加入 JsonPlugin.html LinkButton.jsp AutoComplate...
43. 线程的 run()和 start()有什么区别? 16 44. 创建线程池有哪几种方式? 17 45. 线程池都有哪些状态? 18 46. 线程池中 submit()和 execute()方法有什么区别? 18 49. 什么是死锁? 19 50. 怎么防止死锁? 19 51....
面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...
start - Dec 12 2020分类GIT 开发运维后端春天DI(依赖注入) IoC 弹簧结构 弹簧靴文件要求,分辨率处理请求韩文网址时中断 SpringSecurity SpringSecurity CSRF(站点间伪造) JPA 实体使用JPA审核自动创建/修改...
73.9. Spring IoC 79 73.10. Spring AOP面向方面编程 82 74. 项目中为什么使用SSH 85 75. Spring在SSH中的作用 86 76. weblogic 86 76.1. 如何给weblogic指定大小的内存? 86 76.2. 如何设定的weblogic的热启动模式...
71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep()...
71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() ...