SpringIOC的实现原理

IOC:

控制反转,所谓控制反转是指:本来被调用者的实例是由调用者来创建的,这样的缺点是耦            合性太强,IOC则是统一交给spring来管理创建,将对象交给容器管理,只需要在spring配              置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管            理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然            后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类

总而言之,简单点儿理解:IOC就是把创建对象的过程交给spring管理,不用手动new对象,直接从spring Bean容器中获取从而减少代码的耦合度

IOC容器:

BeanFactory:顶层接口,定义IoC容器基本行为,不会在项目启动的时候就初始化好,而是在当     需要使用这个bean的时候,才会去初始化它(xmlBeanFactory)

ApplicationContext:是Spring提供的一个高级的IoC容器,提供高级特性,比如事件发布、国际化信息支持等,在项目启动的时候,默认会加载所有的bean。

IOC容器初始化流程:

1. 实现资源文件位置的定位,将定义bean的xml文件封装为Resource来被IOC容器处理,由ResourceLoader接口的实现类处理。

ApplicationContext的所有实现类都实现了RecourceLoader接口,因此可以直接调用getResource(参数)获取Resoure对象

FileSystemXmlApplicationContext.getResource获取的就是FileSystemResource实例;

ClassPathXmlApplicationContext.gerResource获取的就是ClassPathResource实例;

XmlWebApplicationContext.getResource获取的就是ServletContextResource实例;

另外像不需要通过xml直接使用注解@Configuation方式加载资源的AnnotationConfigApplicationContext

2. 容器通过BeanDefinitionReader的实现类来完成Resource解析,从而得到Bean的定义信息,这些信息在Spring中使用BeanDefinition对象来表示。

3. BeanDefinition与beanName,Alias一同封装到BeanDefinitionHolder类中,需要把它在IOC容器中注册,由BeanDefinitionRegistry接口的实现类来完成的,注册过程就是在IOC容器内部维护的一个HashMap来保存得到的BeanDefinition的过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值