spring是一个容器,目的是让对象和对象之间(模块和模块之间)不用通过代码来关联,而是通过配置(比如xml)来管理,spring容器根据这些配置用反射来动态组装这些对象。
spring的核心原理主要是两个,ioc/di和aop。
ioc
即控制反转,也就是把创建对象的控制权由对象本身交给容器,由容器去控制对象的创建。
比如有一个用户类,用户类有成员用户信息,即依赖于用户信息类,
传统设计是要在代码里创建一个用户类和用户信息类,然后把用户信息类主动注入到用户类中,
用了ioc容器后,由容器负责对象的创建和依赖管理,代码里只要从容器里取用户类直接使用即可,无需关心创建和依赖,
di
di即依赖注入,也就是把底层类作为成员变量注入到上层类中,降低耦合性。
比如,汽车,车身,底盘,轮胎。汽车是上层,轮胎是底层。
如果没有把底层类作为构造类注入上层类,就会出现如下问题,
比如轮胎直径增加5厘米,底盘也必须跟着修改,车身也跟着修改,汽车里面的成员变量也跟着修改,这样所有的类都要改,不方便维护。
所以把底层类作为参数注入到上层类中,这样改了轮胎的直径,由于直径不是底盘类的成员变量,底盘类有轮胎这个成员,所以无须修改,车身和汽车也同理,
这样就变成了上层类依赖下层类,下层类需要通过某种方式注入到上层类中,这个注入意思是创建下层类,然后赋值给上层类的成员变量的意思,这个依赖注入的过程就交给ioc容器管理。
bean
bean就是控制权交给spring ioc容器,由spring容器负责创建,初始化配置的对象,由spring负责bean的实例化。
bean的装配是指依赖的注入,由spring容器负责,但程序员需要对bean的装配做一些必要的配置。
bean常用的三种装配方式:注解,xml,自动装配。
bean的生命周期:实例化 -> 属性赋值 -> 初始化 -> 销毁。(其它的都是穿插在其中的各种扩展点)。
aop
aop即面向切面编程,也就是在执行一个方法(业务代码)前或者执行方法后去做一些其它模块实现的事情(日志记录,性能统计,安全控制,事务处理,异常处理等),相当于在这个业务方法前后加了一个切面。
原理:动态代理。
spring框架的7个模块
---
参考: