一.Spring是什么?
Spring是一个分层的轻量级Java开源框架,使开发者只需要关注业务需求。Spring框架由20个不同的模块组成。以下是主要的模块;
Spring Context:访问bean时使用框架式的访问方法。
Spring Core:提供核心类库,所有功能都依赖于该类库,提供IOC(控制反转)和DI(依赖注入)服务。
Spring AOP:AOP服务(面向切面编程,通俗来说就是将项目公共组件抽取出来,着重于核心模块的编写)
Spring Dao:对JDBC的抽象封装,简化了数据访问异常的处理,并能统一管理JDBC事务;
Spring ORM:对现有的ORM框架的支持(Hibernate,ibatis,mybatis等);
Spring Web:提供了基本的面向Web的综合特性;
Spring MVC:提供面向Web应用的Model-View-Controller,即MVC实现。

不同的模块互相依赖和单独实现的功能大体可以分为以下六类:
图片说明

二.Spring两大核心
1.IOC,即控制反转,通俗来讲就是将创建对象的权利和对象生命周期的管理交给Spring框架来处理。所以在开发过程中开发人员就不用在关注对象的创建和生命周期,在需要时由Spring框架提供。这个由spring框架管理对象创建和生命周期的机制称之为控制反转。而在创建对象的过程中Spring可以依据配置对对象的属性进行设置,这个过程之为依赖注入,也即DI,所以IOC与DI是同一概念的不同角度的描述。最直观的感受就是创建对象不再去new了。

2.AOP,即面向切面编程,作为面向对象编程的一种补充,是一种将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块的思想。这个模块就被称为“切面”。这种编程思想减少了系统中的重复代码,大大降低了模块间的耦合度,提高了系统的可维护性。
AOP的实现的核心就是代理模式,AOP代理主要分为静态代理和动态代理。静态代理代表是AspectJ;动态代理则以Spring AOP为代表