Spring入门——IoC/DI一

IoC(Inversion of Control),中文意思为控制反转。这是一个概念,也是一种思想。控制反转实际上就是指对一个对象的控制权的反转。例如:

Spring入门——IoC/DI一

Spring入门——IoC/DI一

像这种情况,Car类对象的控制权在User方法里边,这样User和Car之间的耦合度就很高,如果其他对象需要使用到Car类,那么得要重新去创建,也就是说对象得创建,初始化,销毁等操作统统都要开发者自己完成。如果能这些操作交由容器来管理,开发者就可以极大得从对象得创建中解脱出来。

使用Spring之后,我们可以将对象得创建,初始化,销毁等操作交给Spring容器管理。也就是说项目启动时,所有的Bean都将自己注册到Spring容器中去,然后如果在一个Bean中需要使用到另一个Bean对象,则不需要自己去new,而是直接找Spring容器要。

在resources目录下的xml文件中配置要注入到Spring容器中的Bean,配置如下

Spring入门——IoC/DI一

然后在main方法中可以通过ClassPathXmlApplicationContext("xxx.xml"),这里注意一下ClassPathXmlApplicationContext("xxx.xml")和FileSystemXmlApplicationContext("C:\\...\\..\\xxx.xml")的区别,ClassPathXmlApplicationContext加载的是类路径下的文件,因为xxx.xml放在了resources根路径下,所以就直接写文件名就好了,而FileSystemXmlApplicationContext加载的是磁盘文件。

Spring入门——IoC/DI一

这里再说一下ApplicationContext与BeanFactory的区别:用ApplicationContext去加载文件时,会立马创建Bean对象,也就是代码执行到上面图片的new操作时,所有的Bea对象都会被创建;而使用BeanFactory时,相当于延迟加载,使用getBean语句时才会去创建对象,也就是当你要使用时才去创建。所以可以说ApplicationContext适合单例对象,BeanFactory适合多例对象。(默认scope作用域为单例时)。