spring基本原理
Spring 的核心在于控制反转,也就是 IOC 或称为 DI。让一个对象的创建不用 new 了,可以自动的生产。
这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象。
Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 ;控制权由对象本身转向容器。由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 。
详细解读:
控制反转就是把创建对象的动作交给 Spring,自己不去 new 对象。这样的好处在于我们只需要在使用的地方添加一个依赖即可,比如 Resource/Autowired 注解、xml 里面配置依赖关系等,Spring 就能把这些依赖对象注入进来。为什么需要注入呢?想象一下,如果依赖了十几个对象,用的时候难道要一个个 set 进去吗?
Spring 核心解决的就是这些问题,你告诉我你要啥,我给你注入。
Spring还有一个核心就是AOP,这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。
详细解读: 可以把流程和切面类比为一个表格,假设流程从第一行向下执行,一行一行地执行流程节点,每一个流程节点又可以细分为多个步骤,每个步骤占据表格的一列,这个二维的表格就是业务的常态。
当我们需要加入一些与业务无关的操作,比如打印日志、打印入参出参的时候,就可以在单元格边框上添加操作,这个边框就类似于切面,这就是切面的意义。在切面上编码可以无感知地插入进去,可以一次编码到处使用。
spring 子项目
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。

核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
详细解读: 核心容器是 spring 的灵魂,也是 IOC 模式的具体实现。从架构层次上看,这一层是整个 spring 的基础。一定要理解容器的概念,容器不是 spring 的发明,大部分框架都有容器。所谓容器就是数据和对象的集合,启动后解析配置数据以一定的形式存储在容器中,通过扫描配置或注解生成对象并注入数据和依赖关系。容器是 IOC 的基础。
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
详细解读: 通常情况下我们会直接使用上下文,而不是容器。在软件架构设计中,核心层和功能支持层往往是分开的,比如 core 和 SDK 的关系。容器定义的是核心流程、对象,上下文才是我们真正要使用的对象。与大多数 SDK 一样,spring 上下文提供了一些功能支持。
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
详细解读: 前面已经提到了 AOP 的一些分析。spring 的 AOP 本质上还是使用代理实现的,也很好理解。定义一个切面,特定情况下拦截,然后做相应的处理。对于 AOP 掌握其用法即可,感兴趣可以看看源代码。
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 MyBatis。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
详细解读: ORM 是对象关系映射(Object Relational Mapping) 的缩写,一定要理解这里的映射是什么含义。映射要解决的根本问题是 Java 对象与 SQL 语句的转换问题,通过元数据配置驱动转换,ORM 框架可以屏蔽掉持久化的复杂操作。JDO、Hibernate 目前已经被 MyBatis 所取代,因此只需要学习 MyBatis 即可。
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
详细解读: MVC 几乎是当下 web 应用的标配,当然 MVC 也存在一些弊端,以后会有文章解读。spring MVC 是一套成熟的 MVC 框架,能够很好地分离控制逻辑、业务逻辑和视图,也能支持 RestFull 接口。大部分情况下只需要掌握控制器入参、控制器出参、视图数据传递即可完成开发工作,更深入一点可以学习 web 上下文、事件、拦截器等高级用法。
关注公众号“程序之心”(ID:chengxuzhixin),每天给你诚意满满的干货!