Spring IOC概念及体系结构


平时在开发程序的时候,每个对象在使用它的合作对象时都要自己主动去创建这个合作对象,需要时就主动创建出来,创建权在自己手里,但是这种方式耦合度就很高;在使用Spring之后,将对象的创建权交给Spring容器来处理,所谓的控制就是将对象创建控制权交给了容器来创建,即容器控制了对象的创建,起初依赖对象的创建时对象主动创建,是正转,而反转就是将依赖对象的创建及注入给Spirng容器处理,对象只是被动的接受依赖对象。

注入方式


在IOC中,为被注入对象提供被依赖对象有三种方式:构造方法注入,setter注入,接口注入

DI(依赖注入)概念


容器动态的将依赖关系注入到组件中,容器实例化对象的时候主动将它依赖的类注入给它

IOC的体系结构

========

设计结构图


image.png

下面对结构图进行简要分析,来理解这个接口设计图

第一条接口设计主线是从BeanFactory到HierarchicalBeanFactory再到ConfigurableBeanFactory,BeanFactory定义了基本方法,例如getBean()等,HierarchicalBeanFactory增加了getParentBeanFactory接口功能,使BeanFactory具备了双亲IOC容器的管理功能;ConfigurableBeanFactory主要定义了一些对BeanFactory的配置功能,例如setParentBeanFactory()设置双亲IOC容器,通过addBeanPostProcessor()配置Bean后置管理器等;通过这些接口设计的叠加,定义了BeanFactory就是简单IOC容器的基本功能

第二条设计主线是以ApplicationContext为核心的接口设计,从BeanFactory到ListableBeanFactory再到ApplicationContext,再到我们常用的WebApplicationContext或者ConfigurableApplicationContext。L在这个接口体系中ListableBeanFactory和HierarchicalBeanFactory两个接口,连接BeanFactory接口定义和ApplicationContext应用上下文的接口定义。在ListableBeanFactory接口中,细化了许多BeanFactory接口功能,例如getBeanDefinitionNames()方法;对于ApplicationContext接口,它通过继承MessageSource,ResourceLoader,ApplicationEventPublisher,在BeanFactory简单IOC容器的基础上添加了许多对高级容器的特性支持。

Resource体系


org.springframework.core.io.Resource,它的每一个实现类都代表了一周资源的访问策略,例如

ClassPathResource、RLResource、FileSystemResource 等。

image.png

ResourceLoader 体系


有了资源之后,就要对资源进行加载,Spring就是利用ResourceLoader来进行统一的资源加载

image.png

BeanFactory体系


BeanFactory提供的是最基本的IOC容器的功能,并且提供了IoC容器所应该遵守的最基本的服务契约;BeanFactory只是一个接口,而例如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContet等都可以提供具体的实现。

image.png

BeanFactory基本方法

  • containsBean(String name)方法可以根据名字判断是否还有此名字的Bean

  • isSingleton(String name)方法可以根据名字判断是否是单例的Bean

  • isPrototype(String name)方法可以根据名字判断是否是多例的Bean

  • isTypeMatch(String name, Class<?> typeToMatch)方法可以根据名字的Bean的Class类型是否是特定的Class类型

  • getType(String name)方法查询指定名字的Bean的Class类型

  • getAliases(String name)查询 该指定名字所有的Bean的别名

BeanFactory容器的设计原理

BeanFactory接口提供了使用IOC容器的基本接口规范,Spring还提供了符合这个IOC容器的一系列容器进行具体实现;通过XmlBeanFactory的实现为例进行说明:

image.png

从图中可以看到类之间的联系

image.png

从源码可知,XmlBeanFactory继承自DefaultListableBeanFactory,XmlBeanFactory新增了读取XML文件的方法

最后

image.png

ge/format,png)

从源码可知,XmlBeanFactory继承自DefaultListableBeanFactory,XmlBeanFactory新增了读取XML文件的方法

最后

[外链图片转存中…(img-2XvAq9mS-1719565813566)]

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值