Spring核心机制:依赖注入

        控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。

       使用依赖注入,可以为Bean注入普通的属性值,而且还可以注入其他Bean的引用。通过使用这种依赖注入,javaEE应用中的各种组件就不在需要以硬编码方式耦合在一起,甚至可以不使用工厂模式,当某个java实例需要其他实例时,系统自动提供所需要的实例,不需要程式显式获取。

       Spring极好的利用了依赖注入,但是Spring并不是依赖注入的首创,也不是唯一选择。在Spring中,不管是依赖注入,还是控制反转,他们的含义是完全相同的,在某个java实例需要另一个java实例时,在传统的设计过程中,通常是由调用者来创建被调用者的实例。在依赖注入的模式下,创建被调用者的工作不在由调用者完成,所以称之为控制反转:创建被调用者实例的工作通常是由Spring容器来完成,然后再注入调用者,因此,也叫做依赖注入。不论是依赖注入,还是控制反转,都说明了Spring采用动态,灵活的方式来管理各种对象,对象与对象之间的具体实现互相透明。

        创建java对象,第一种情况,java实例的调用者创建被调用的java实例,调用者直接使用new关键字创建被调用者实例,程序高度耦合,效率低下,在真实的应用中一般不会使用这种方式。这种方式是初学者比较喜欢的使用方式,有如下的两个坏处:1,可扩展性差。2,各组件职责不清。第二种情况,调用者不需要关心被调用者的具体的实现过程,只需要找到符合某种标准的实例,就可以使用。这种情况下调用的代码面向接口编程,能够让调用者和被调用者解耦,这是工厂模式大量使用的原因。但是调用者需要自己主动定位工厂,调用者和工厂耦合在一起。第三种情况最为理想,程序完全不用理会被调用者的实现,而且也不用主动定位工厂,这是最好的解耦方式。实例之间的的依赖关系是由Ioc容器负责管理。

        依赖注入,意思就是指在程序运行的过程中,如果需要另一个对象协作(包括调用它的方法,访问他的属性)时,不需要在代码中创建被调用者,而是依赖于外部容器的注入。Spring的依赖注入对调用者和被调用者几乎没有任何的要求,完全支持对POJO之间依赖关系的管理。依赖注入通常有设值注入和构造注入。

        IoC容器的概念:IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装。在Spring中BeanFactory是IoC容器的实际代表者。Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配。一般使用基于xml配置文件进行配置元数据,而且Spring与配置文件完全解耦的,可以使用其他任何可能的方式进行配置元数据,比如注解、基于java文件的、基于属性文件的配置都可以。IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。
IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

本博客参考自:《轻量级javaEE企业应用实战》李刚

                          http://jinnianshilongnian.iteye.com/blog/1413846

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值