文档章节

深入理解Spring的IOC容器

怪咖晨
 怪咖晨
发布于 2016/11/13 23:41
字数 1243
阅读 141
收藏 2

IOC概述

IOC是Spring容器的内核,AOP、声明式事务等功能都依赖于此功能,它涉及代码解耦、设计模式、代码优化等问题的考量,我们将通过以下三个方面来深入理解IOC:

IoC的初步理解

IoC的注入类型

 构造器注入:通过调用类的构造函数,将接口实现的类通过构造函数变量传入。

 属性注入:通过setter方法完成调用类所需依赖的注入,更加灵活方便。

 接口注入:将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法。

IoC的注入方式

Spring最为一个容器,通过配置文件或者注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作。

java反射机制

java语言允许通过程序化的方式间接对Class的对象实例操作,class文件有类加载器加载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知class的结构信息,如构造函数、属性和方法等。

ClassLoader:

 类加载器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件,主要工作由classLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入class字节码文件。

ClassLoader工作机制:

装载:查找和导入class文件

链接:执行校验,准备和解析步骤

初始化:对类的静态变量、静态代码块执行初始化工作

Java反射机制

Class反射对象描述类语义结构,可以从Class对象中获取构造函数,成员变量,方法等类元素的反射对象,并以编程的方式通过这些反射对象对目标类对象进行操作。这些反射类对象在java.reflect包中定义,下面是最主要的三个反射类:

Constructor

Method

Field

Java反射机制与IOC的关系:

在Spring中,通过IoC可以将实现类、参数信息等配置在其对应的配置文件中,当需要更改实现类或参数信息时,只需要修改配置文件即可,还可以对某对象所需要的其他对象进行注入,这种注入方式都是在配置文件中做的。

Spring的IoC的实现原理利用的就是Java的反射机制,Spring的工厂类会帮助我们完成配置文件的读取、利用反射机制注入对象等工作,我们还可以通过Bean的名称获取对象的对象。

资源访问工具类

JDK所提供的访问资源的类并不能很好的满足各种底层资源的访问需求,因此,Spring设计了一个Resource接口,它为应用提供了更强大的访问底层资源的能力:

主要方法:

boolean exists()

boolean isOpen()

URL getURL()

File getFile()

InputStream getInputStream()

主要实现类:

ByteArrayResoure

ClassPathResource

FileSystemResource

InputStreamResource

ServletContextResource

UrlResource

为了访问不同的资源,必须使用相应的Resource实现类,这是比较麻烦的,Spring提供了一个强大的加载资源的机制,能够自动识别不同的资源类型

资源类型地址前缀:

classpath  classpath:

File    file:

http    http://

ftp     ftp://

无前缀

Ant风格的匹配符:

? 匹配文件名中的一个字符

* 匹配文件名中的任意字符

** 匹配多层路径

Ant风格的资源路径示例:

Classpath:com/t*st.xml

File:/home/hcn/*.xml

Classpath:com/**/test.xml

classpath:org/springframork/**/*.xml

BeanFactory和ApplicationContext

BeanFactory是Spring框架的最核心的接口,它提供了高级IoC的配置机制。

ApplicationContext建立在BeanFactory基础之上,提供了更多面向应用的功能,它提供了国际化支持和框架事件体系,更易于创建实际应用,一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文。

BeanFactory是一个类工程,可以创建并管理各种类的对象,Spring称这些创建和管理的java对象为Bean。在Spring中,Java对象的范围更加宽泛。

BeanFactory体系结构:

xmlBeanFactroy

ListableBeanFactory

HierarhicalBeanFactroy

ConfigurableBeanFactory

AutowireCapableBeanFactory

SingletonBeanFactory

BeanDefinitionRegistry

初始化顺序

创建配置文件

装载配置文件

启动IoC容器

获取Bean实例

ApplicaitonContext介绍:

ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。在BeanFactory中,很多功能需要以编程的方式实现,而在ApplicationContext中则可以通过配置文件的方式实现。

ApplicationContext实现类:

ClassPathXmlApplicationContext

FileSystemXmlApplicationcontext

ConfigurableApplicationContext

Bean的生命周期


Spring容器中的Bean拥有明确的生命周期,由多个特定的生命阶段组成,每个生命阶段都允许外接对Bean施加控制。


本文转载自:http://hanchengen.blog.51cto.com/8340379/1872207

共有 人打赏支持
怪咖晨
粉丝 2
博文 3
码字总数 625
作品 0
昆明
程序员
1 Spring核心:IoC容器的实现

依赖控制反转的实现有很多种方式。在Spring中,IoC容器是实现这个模式的载体, 它可以在对象生成或初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方...

qq_18150351
04/24
0
0
深入理解Spring源码(一)-IOC容器的定位,载入,注册

前言:Spring源码继承,嵌套层次非常多,读起来非常容易晕,小伙伴们在看文章的时候一定要跟着文章的思路自己去源码里点一点,看一看,并且多看几次。就会越来越清晰。下面开始正题 1.Spring...

Meet相识_bfa5
05/01
0
0
三分钟轻松了解Spring框架基础知识

做为一个合格的Java开发人员,你一定听说过Spring框架,虽然会应用,但却未必能够深入理解框架的原理,只是像其它人一样,泛泛的只是停留在理解的层面。小编会带着大家一步步了解Spring框架。...

爱尚实训
07/22
0
0
SpringBoot的幕后推手...

一、背景   这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开...

Java工程师-Distance
06/01
0
0
阿里老司机带你使用Spring框架快速搭建Web工程项目

摘要:Spring 框架是一个开源的 Java 平台,它为容易而快速的开发出耐用的 Java 应用程序提供了全面的基础设施。借助于Spring框架可以快速搭建Web工程项目,本文中阿里巴巴高级开发工程师嵛山...

萌萌怪兽
05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway真的有那么差吗?

前言 Spring Cloud从一开始最受大家质疑的就是网关性能,那是由于Spring Cloud最初选择了使用Netflix几年前开源的Zuul作为基础,而高性能版的Zuul 2在经过了多次跳票之后,对于Spring这样的整...

Java小铺
45分钟前
1
0
SpringBoot远程调试,远程debug你的线上项目

开发环境中代码出错了,可以利用IDE的debug功能来进行调试。那线上环境出错呢? 一、假设我们的项目是部署在tomcat中,那我们就需要对tomcat进行一定对配置,配置如下。 1. windows系统中,找...

nonnetta
50分钟前
0
0
JAVA秒杀优化方向

秒杀优化方向 将请求尽量拦截在系统上游:传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小,我们可以通过限流、...

小贱是个程序员
58分钟前
0
0
C# 统计字符串中大写字母和小写字母的个数

static void Main() { int count1 = 0; int count2 = 0; Console.WriteLine("请输入字符串"); string str = Convert.ToString(Consol......

熊二的爸爸是谁
今天
0
0
分布式服务框架之远程通讯技术及原理分析

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是...

老道士
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部