目录
从今天开始,阅读资料,整理Spring框架的知识。
Spring框架:截止目前Java最流行的框架,最主要的思想是控制反转(IoC, inversion of Control)和面向切面(AOP, Aspesct Oriented Programming).
这一篇主要了解控制反转IoC。
1、概念
IoC本质是一个容器。Spring通过IoC这个容器,依靠描述(配置文件)来实现对象的创建及其依赖关系。
2、为什么要通过配置来做对象的建立及其依赖关系呢?
来想象一下,对于某一类的事物,可以定义一个接口,这类事物有一些子类,可以定义相应的子类。比如糖,有冬瓜糖、西瓜糖、南瓜糖等等。假设我想吃的是冬瓜糖,通过程序的方式,一般是如下这样使用的:首先定义接口下的某一类的具体对象,然后去使用这个具体对象。
// 吃糖,吃冬瓜糖,代码逻辑
Candy candy = new CandyWintermelon();
user.setCandy(candy);
user.useCandy();
但是这样就有一个问题,如果我又想吃南瓜糖了怎么办?是不是需要又需要再去申明一个南瓜糖的对象呢?答案是肯定的,必须再次申明一个南瓜糖的对象,才能实现我又想吃南瓜糖的逻辑。其实这看起来也还好,因为也就才多生成一个对象而已,感觉也不费事。不过想象一下:一个大型互联网的对象是成千上万的,如果需要不断创建、修改新的对象,那么将会出现很大的问题。
因此,Spring提出了使用IoC来实现对象及其依赖关系的创建,其目的就是为了实现对象及其依赖关系创建的快捷和方便。
3、怎么实现对象及其依赖关系的创建呢?
方式:用户编写配置文件(一般是XML形式),IoC容器通过这个配置文件去找到相应的对象和依赖关系,然后向用户注入找到的内容。
简单理解:这就是用户提供一个买货清单,然后IoC通过这个清单找货、卖货、送货的过程。其实挺简单的。控制反转的含义就是用户只需要提供用户的需求描述信息,而需求的资源是可以通过需求描述信息在IoC容器中找到的,负责寻找的是IoC容器(拥有控制权的是IoC容器),而不再是用户了,所以叫做控制反转。
示例:
使用Spring IoC注入南瓜糖给用户,XML配置文件。
// IoC配置文件
<bean id = "candy" class ="CandyWintermelon" / >
<bean id = "user" class ="xxx.user" >
<property name = "candy" ref = "candy"/>
</bean>
4、控制反转IoC有啥好处?
1、想要增加、修改资源不需要再去new对象,想要修改依赖关系也可以通过配置完成,可以即插即拔的管理对象及其关系;
2、把Bean之间的关系解耦了,更容易写出逻辑清晰的代码;
3、提供对Java Bean生命周期的管理,可以延迟加载,在生命周期内定义行为等。能够方便地使用、管理Java资源。