spring是一个容器框架,用来装javaBean(java对象),也是一个中间层框架(万能胶)可以起到连接作用,比如将mybatis、springMVC等粘合在一起运用,可以让我们的开发更快、更简洁。
Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。
IOC
ioc容器:实际上就是个map(key,value),里面存的是各种对象(在xml里配置的bean节点或有这些注解的类@repository、@controller、@service、@component),项目启动时读取配置文件里配置的bean节点,根据全限定类名使用反射创建对象放到Map里。
这时候map里就有各种对象了,接下来在代码中需要用来这些对象的地方进行依赖注入。
控制反转:没有引入IOC容器之前,如对象A依赖于对象B,那么在A中就要主动去创建对象B,对对象B的控制权在我们自己的手上。引入IOC容器之后,IOC容器会主动创建一个对象B注入到对象A需要的地方,对象B不需要我们主动创建了,变成了被动获取,这就是控制反转。
依赖注入:获得依赖对象的过程被反转了。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。依赖注入是实现IOC容器的方法,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
AOP
系统是由许多不同的组件组成的,每个组件负责不同的功能。除了实现自身的核心功能之外,往往还承担额外的职责,比如日志这种非核心业务,这种服务被称为横切关注点,因为它们会跨域系统的多个组件。
当我们需要为分散的对象引入公共的行为时,OOP显得无能为力。因为OOP允许定义从上到下的关系,但并不适合从左到右的关系。比如日志代码往往水平地分布在所有对象层次中,且与它所散布到的对象的核心功能毫无关系。
所以在OOP设计中导致了大量的代码重复,而不利于各种模块的重用。
AOP:将程序中的交叉业务逻辑(比如日志、安全、事务等),封装成一个切面,然后注重到目标对象(具体业务逻辑)中去。AOP可以对某个对象或某些对象的功能进行增强,比如对对象中的方法进行增强,可以在执行某个方法之后做一些事情,也可以在执行完某个方法之后做一些事情。