Spring组件和IOC容器

Spirng 组件 和 IOC 容器学习

[TOC]

Spring中的三大组件

Bean组件

主要完成三个功能,在Spring中好比一个演员的角色:
1、Bean的创建:由BeanFactory完成
2、Bean的定义:由BeanDefinition完成
3、Bean的解析:由BeanDefinitionReader完成

Context组件

该组件提供了Spring的基本运行环境,在Spring中好比一个舞台的角色,它主要是发现和管理Bean之间的依赖关系,实际上就是作为Spring的IOC容器。

core组件

主要有完成对外部资源文件的访问的功能(Resource),在Spring中好比一个道具的角色。

三大组件及Spring特性的关系

前三说到三大组件都是什么角色,一句话总结,一个演员在好的舞台上,有好的道具,想要演一出好戏,就需要Spring的一些好的节目来吸引观众,Spring特性就好比一个精心编排的节目。

关于IOC容器

IOC是一个很大的概念,首先IOC最重要的就是完成了,对象的创建以及管理等,IOC包含两种类型,依赖注入(Denpendency Injection) 和 依赖查找(Denpendecy LookUp),其中DI被常用。
这种依赖于注入机制正是IOC容器来控制的。
其实IOC就是Spring三个核心组件中的Context组件,它负责发现和管理Bean之间的依赖关系,都是实现或继承了BeanFactory与Reousrce。

何为控制反转

上节已经说了,IOC主要是对对象的创建和管理等,控制反转在我的理解就是,当一个业务类,需要其他类辅助的情况下,那么我们需要手动new出来辅助类的对象,而IOC则需要我们,只要告诉容器要一个什么样的对象,至于这个对象是如何创建的、如何管理对象的关系,这些我们都不用在关心了,直接应用这个对象就可以了,那么这个过程中,实际上就叫做控制反转。

基本结构

Resource:

是一个访问资源策略的一个对象.

方法
1、getInputStream():该方法可以定位并且打开创建实例加载的资源,返回资源对应的输入流。该方法每调用一个都会new一个流,为了避免资源浪费。调用者必须负责关闭输入流。
2、isOpen():该方法判断资源是否打开,文件可以设置成是否可以多次读取,如果不能,为了避免内存泄漏问题,请手动显示关闭。
3、exists():该方法判断Resource指向的资源文件是否存在。
4、还几个不经常用。。。暂不一一列举。
实现类:
1、UrlResource:用来访问网络资源的对象,创建实例对象时可以传入FIle对象,以及String 类型的字符串,会抛出一个异常该异常是IOException的子类。其中:可以判断HTTP和FTP,前者可以访问http协议的资源,后者可以访问ftp协议的资源。
2、ClassPathResource:用来访问类加载路径里面的资源,可以读取一些自己配置的文件。
3、FileSystemSource:可以访问文件系统里面的配置文件。
4、ServletContextResource:可以加载自己配置的ServletContext 里面的配置文件。

BeanDefinition:

用来抽象和描述一个具体的Bean对象,描述一个Bean对象的基本数据结构,属于Bean组件中的Bean的定义阶段。

BeanDefinitionReader:

对外部的资源对象,描述成统一的内部Bean对象,相当于转化BeanRefinition不同的外部资源对象对应的reader也不同,例如 XML 文件就需要XMlBeanDefinition来进行读取。

BeanFactory:

用来定义一个纯粹的Bean容器,是一个Bean容器必备的结构。隔离外部应用,是Bean组件中重要的组成部分,属于Bean的创建,BeanRefinition 是它的基本数据结构。

ApplicationContext:

从名字来翻译:应用上下文,也叫Spring中Context组件的顶级父类,其实他就是持有一个BeanFacotory对象,应为BeanFacotory实现了一个容器的基本结构和功能,但是是与外部隔离的。所以读取一个配置文件,并将配置文件解析成BeanRefinition,注册到BeanFactory时就需要ApplicationContext,其常见实现:
ClasspathApplicationContext,FileSystemXmlApplicationContext,等他们都是和Classpath,xml等相关的代表了应用程序的一些环境吧,前者本人经常用到,最经典的就是加载定时任务的XML文件是,多次使用ClassPathApplicationContext。

ApplicationContext 与 BeanFactory区别

首先他们在Spring组件中所属组件不同,扮演的角色也不同。
前者可以支持不同的信息员,国际化支持
基于Resource和ResourceLoader的基础上访问不同的资源

标注

只是自己的初步了解和学习,可能顺序比较混乱,如果错误或者与其他人有出入请包涵。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值