SpringIOC 控制反转

一、相关概念

IOC: Inversion of Control(控制反转)是一种设计思想,就是容器控制应用程序所需要外部资源的创建和管理,然后将其反转给应用程序。反转是指获得依赖对象的方式反转了,由spring来负责控制对象的生命周期和对象间的关系。

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。它并不是一种技术实现,而是一种设计思想。应用程序依赖容器提供的外部对象,容器将其依赖的外部资源在运行期注入到应用程序中;某个对象被调用时,其所依赖的对象由容器注入。

DI实现:

Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
在Spring构造bean的前提是解析该Bean的Definition,解析完成之后生成该bean的<key, BeanDefinition>的map,getBean的时候会根据key对应的BeanDefinition构造相关的Bean对象。

 

springIOC和工厂模式相比,其优点在热插拔。

热插拔就是说你把XML改了spring就立刻发觉你改动了XML,重新读一遍XML,就会用你的新改动了,根本不用重新启动JVM。

ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。 

Spring采用ThreadLocal方案来保证单例模式下的线程安全。 

无状态的Bean适合用不变模式,技术就是单例模式,这样可以共享实例,提高性能。

有状态的Bean,多线程环境下不安全,那么适合用Prototype原型模式。Prototype: 每次对bean的请求都会创建一个新的bean实例。

有状态就是有数据存储功能,无状态就是一次操作,不能保存数据。

 

二、优点及缺点

优点

  1.资源集中管理,实现资源的可配置和易管理,降低对象关系维护的复杂度。
      2.降低了使用资源双方的依赖程度,也就是我们说的耦合度。

缺点

IoC的灵活性是有代价的:设置步骤麻烦、生成对象的方式不直观、反射比正常生成对象在效率上慢一点。因此使用IoC要看有没有必要,我认为比较通用的判断方式是:用到工厂模式的地方都可以考虑用IoC模式。与工厂模式的区别是:灵活。

三、Spring的bean工厂主要实现了步骤:

1.解析配置文件(bean.xml)
2.使用反射机制动态加载每个class节点中配置的类

3.为每个class节点中配置的类实例化一个对象

4.使用反射机制调用各个对象的seter方法,将配置文件中的属性值设置进对应的对象
5.将这些对象放在一个存储空间(beanMap)中

6.使用getBean方法从存储空间(beanMap)中取出指定的JavaBean

 

注:借鉴包含但不限于以下博客

spring ioc原理(看完后大家可以自己写一个spring)

深入理解Spring的两大特征(IOC和AOP)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值