前面讲了如何通过面向接口编程和使用构造器传参初始化变量来实现java类之间的解耦。这只是spring依赖注入的第一步,在使用的时候需要使用注解方式或者xml方式配置自动装配。那么问题来了,我们前面说了一大堆把java的两个类解耦,现在我要使用的时候只需要新建一个对象然后利用构造器传参或者set方法初始化变量不就可以了吗,干嘛非要用注解或者xml配置这么麻烦。我一开始学习的时候也是这么想的,不是要解耦吗,已经解耦了啊干嘛要那么麻烦。
本来只是解耦的话这样确实已经足够了,但是spring想做的明显不止这么多。spring的两大特征一个是面向切面,另一个是依赖注入。依赖注入又叫控制反转,也就是把java对象产生的的控制权从程序员手里转换到spring容器中。spring容器负责各个对象的产生,程序员在需要某一个对象的时候直接从容获取就好了,具体的代码实现就是用工厂模式以及java的反射知识这里就不多说了,很多书上都有对java反射的详解。
既然讲到控制反转,那spring容器中java对象的生命周期就不得不提。传统的java应用中,bean的生命周期在使用java关键字new的时候进行bean实例化,然后就可以使用了,一旦bean不在利用就由java自动回收,而在spring容器中会复杂一点。首先肯定是实例化bean,然后由于很多bean在实例化的时候都需要注入其他bean,所以首先实例化最底层的bean,然后将bean注入到其他bean中,然后在很多情况下程序员需要对生成的bean做一些自定义的操作,所以bean在实例化之后spring会根据bean实现的接口来给bean传递各种方法,具体的就不多讲了,笔者在这里更多的是捋一捋spring各种功能的一些基本思路所以并没有打算很详细的记下一些具体的代码