`
游伯度
  • 浏览: 22019 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring IOC - start

阅读更多

Spring 使用已经有些年头了,但始终没有静下心来整理 Spring,关于 Spring 各种实现方式也都是大而概之的了解,也没有深入的研究。今天终于鼓起勇气来整理他了。

 

万事开头难,从哪里开始呢,那就从常用的 Factory 开始吧。

在日常的使用中,比较少的直接使用 BeanFactory,常用是 ApplicationContext 接口。下面我们就以FileSystemXmlApplicationContext 为例,开始梳理 Spring 中的依赖注入的知识。

 

首先看看 FileSystemXmlApplicationContext 实现了那些接口、继承了那些基类:

FileSystemXmlApplicationContext Class

上图可以说明 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 是如何加载资源文件的。

  • 大小: 58.4 KB
分享到:
评论

相关推荐

    Spring-Kapcb: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

    spring-javaconfig-reference

    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 Recipes A Problem-Solution Approach, 3rd Edition

    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 Recipes: A Problem-Solution Approach, Second Edition

    * 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, ...

    Apress.Spring.5.Recipes.A.Problem-Solution.Approach.4th.Edition

    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 ...

    Spring 5 Recipes, 4th Edition

    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 ...

    Spring.net框架

    在Step3到Step5的例子中,我们将利用Spring.net提供的Ioc框架,轻松完 成解耦以及系统改造等工作。 一、类之间的依赖 我们的第一个例子主要用于说明程序的基本构造,并且作为一个反面典型,引出为什么要解耦,以及...

    trinitygo:适用于grpc,http,IOC,DI,spring,unittest的golang框架

    // start your journey in Trinity // you can check the demo under example folder 概述 声明性路由器 IOC容器和依赖注入 定制中间件 定制运行时(跟踪分析,用户身份验证,事件总线...) 支持原子请求 支持...

    flowerty:java上的带有Web ui的鲜花商店服务

    [Spring] - 用于管理 bean 的 ioc 容器。 [MySQL] - 世界上最流行的开源数据库。 [MongoDb] - 是一个开源文档数据库,也是领先的 nosql 数据库。 MongoDB 设置 ActiveMQ 下载分发: : 解压到任意文件夹 开放...

    Java面试的10个问题(含参考答案).docx

    Java面试的10个问题 请你简述Java框架集合相关...谈谈你对spring IOC和DI的理解,它们有什么区别? Thread 类中的start() 和 run() 方法有什么区别? 解释一下java.io.Serializable接口。 Error和Exception的区别。

    koatty:Koa2 +打字稿= Koatty。 使用Typescript的装饰器实现IOC和AOP

    使用Typescript的装饰器实现IOC和AOP。 文献资料 (进行中 :flexed_biceps: ) [koatty_doc_EN]即将推出... 安装 npm i -g koatty_cli 快速开始 1.创建项目 koatty new projectName cd ./projectName yarn ...

    Jetty中文手册

    Jetty Start.jar 配置Jetty 如何设置上下文(Context Path) 如何知道使用了那些jar包 如何配置SSL 如何使用非root用户监听80端口 如何配置连接器(Connectors) 如何配置虚拟主机(Virtual Hosts) 如何配置会话ID...

    inversify-koa-template

    基于 的一个模仿spring的IOC风格的koa后端node服务模板 旨在快速方便的搭建出一个面向切面编程(AOP)的 node web 应用模板,不过度封装,接近原生。 inversify的中文文档: 开发目的 遵循 原则的代码。 鼓励和促进...

    struts自我学习过程程序以及说明

    spring.ioc包; (有问题.............待解决.........) struts和Ajax: (例子一) 载入了json包; strutsandajax包; 可以直接运行jsonplugsm.action,出现下载的, 可以加入 JsonPlugin.html LinkButton.jsp AutoComplate...

    史上最全java面试,103项重点知识,带目录

    43. 线程的 run()和 start()有什么区别? 16 44. 创建线程池有哪几种方式? 17 45. 线程池都有哪些状态? 18 46. 线程池中 submit()和 execute()方法有什么区别? 18 49. 什么是死锁? 19 50. 怎么防止死锁? 19 51....

    Java常见面试题208道.docx

    面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...

    TIL:[2020,12,12〜ing]今天我学到了

    start - Dec 12 2020分类GIT 开发运维后端春天DI(依赖注入) IoC 弹簧结构 弹簧靴文件要求,分辨率处理请求韩文网址时中断 SpringSecurity SpringSecurity CSRF(站点间伪造) JPA 实体使用JPA审核自动创建/修改...

    java面试题

    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()...

    java面试宝典

    71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() ...

Global site tag (gtag.js) - Google Analytics