Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

java 分享会

分享人:童志荣

1.背景介绍

2.知识剖析

3.常见问题

4.编码实战

5.扩展思考

6.参考文献

7.更多讨论

1.背景介绍

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法。

这种开发存在的问题是 new 的类实例不便于统一管理,spring 提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。

依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做。

2.知识剖析

spring有多种依赖注入的形式

1、Setter方法注入

2、构造方法注入

3、静态工厂的方法注入

4、实例工厂的方法注入

其中,用得最多的是1、2 种,多写多练就会非常熟练

手动装配

通过在 或者 标签中使用ref属性,在上一小节的“依赖注入”部分使用的就是手动装配

自动装配

标签中使用autowire属性;

3、常见问题

spring 配置文件是什么?

Spring 配置文件是个XML 文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用。

什么是依赖注入?

依赖注入,是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不用创建对象,而只需要描述它如何被创建。

你不在代码里直接组装你的组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。

什么是bean装配?

装配,或bean 装配是指在Spring 容器中把bean组装到一起,前提是容器需要知道bean的依赖关系,如何通过依赖注入来把它们装配到一起。

什么是自动装配?

Spring 容器能够自动装配相互合作的bean,这意味着容器不需要 constructor-arg 和 property 配置,能通过Bean工厂自动处理bean之间的协作。

4、编码实战

5、扩展思考

spring的依赖注入到底有什么优势?

让使用者不需要自己去创建或获取自己的依赖,既然创建或获取的过程不是使用者控制的。

这也就意味着,当我需要切换依赖时,不需要改变使用者的代码。这当然要结合面向接口编程等思想,也许有人要说我一个接口就只有一个实现,何必用接口,我也基本不会去切换自己的实现。

说的对,然而就算你只有一个实现。 但是你往往会用到AOP吧,其实用代理对象替换原对象也算是切换了实现。什么日志,权限检查,异常处理等等需求。