为什么有这篇文档
工作两三年之后,总感觉什么东西都懂,但是什么东西又都不会。所以日常学习是很有必要的,俗话说学而不思则罔 ,思而不学则殆。所以我们要学思结合,学习的方法有很多,但是思考的深度或者说有没有思考最好的体现方式就是输出。本系列以开发日常中用的最多的框架Spring为例,来记录学而思的过程。
Spring生态圈
学习Spring最好的方式还是官网 https://spring.io/,进入官网我们可以了解到Spring其实是一个生态圈 里边包含了很多功能强大的子框架 例如 SpringBoot SpringCloud以及SpringData等根据Spring衍生出来的框架。我们最常说的spring 是指的是 Spring Framework 选择 Spring Framework 进入wiki 我们可以看到这样一段话
··The Spring Framework is divided into modules. Applications can choose which modules they need. At the heart are the modules of the core container, including a configuration model and a dependency injection mechanism. Beyond that, the Spring Framework provides foundational support for different application architectures, including messaging, transactional data and persistence, and web. It also includes the Servlet-based Spring MVC web framework and, in parallel, the Spring WebFlux reactive web framework.
意思是说 spring分为好多个模块,应用开发的时候可以根据自身的需要选择模块,核心模块是包含spring核心功能的AOP和IOC的,其他的 事务,消息 web等模块可以根据需求进行添加。
Spring 源码的构建
学习Spring 源码第一步就是需要从github上下载构建源码,地址:https://github.com/spring-projects/spring-framework.git
springframework 是使用gradle 构建的 构建方式比较简单,这里不再多说,如果有读者构建失败,可以留言。
springframework 模块介绍
spring框架是一个分层的架构,它包含了一系列的功能,并被分成了20多个模块。
Core Container
core Container(核心容器) 它包含了 Core、Beans、Context、Expression Language
Core 模块
Core 模块是Spring框架的核心基础,是其他模块的工具类,包含cglib 和asm等工具集。
Beans模块
Beans 模块是所有应用都要用到的,它包含访问配置文件,创建和管理bean以及IOC/DI操作相关类
Context 模块
Context 模块构建于Beans和Core模块之上,提供了类似于JNDI注册器的框架式访问对象的方法。Contex在Beans的基础上扩展了很多功能例如国际化、事件传播、资源加载等。ApplicationContext 在此模块上。
Expression Language 模块
此模块提供了强大的表达式语言在运行时查询和操纵对象。它是JSP 2.1规范中定义的unifed expression language的一个扩展。该语言支持设置/获取属性的值,属性的分配,方法的调用,访问数组上下文(accessiong the context ofarrays)、容器和索引器、逻辑和算术运算符、命名变量以及从Spring的IoC容器中根据名称检索对象。它也支持list投影、选择和一般的list聚合。
Data Access/Integration
这一部分主要是包含数据访问对象关系映射,JMS 消息以及事务等内容
- JDBC模块提供了一个JDBC抽象层,它可以消除冗长的JDBC编码和解析数据库厂商特有的错误代码。这个模块包含了Spring对JDBC数据访问进行封装的所有类。
- ORM模块为流行的对象-关系映射API,如JPA、JDO、Hibernate、iBatis等,提供了一个交互层。利用ORM封装包,可以混合使用所有Spring提供的特性进行O/R映射。如前边提到的简单声明性事物管理。Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQL Map。所有这些都遵从Spring的通用事务和DAO异常层次结构。
- OXM模块提供了一个对Object/XML映射实现的抽象层,Object/XML映射实现包括JAXB、Castor、XMLBeans、JiBX和XStream。
- JMS(Java Messaging Service)模块主要包含了一些制造和消费消息的特性。
- Transaction模块支持编程和声明性的事物管理,这些事物类必须实现特定的接口,并且对所有的POJO都适用。
Web 模块
Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以, Spring框架支持与Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。Web层包含了Web、Web-Servlet、Web-Struts和Web-Porlet模块,具体说明如下。
- Web模块:提供了基础的面向Web的集成特性。例如,多文件上传、使用servletlisteners初始化IoC容器以及一个面向Web的应用上下文。它还包含Spring远程支持中Web的相关部分。
- Web-Servlet模块web.servlet.jar:该模块包含Spring的model-view-controller(MVC)实现。Spring的MVC框架使得模型范围内的代码和web forms之间能够清楚地分离开来,并与Spring框架的其他特性集成在一起。
- Web-Struts模块:该模块提供了对Struts的支持,使得类在Spring应用中能够与一个典型的Struts Web层集成在一起。注意,该支持在Spring 3.0中是deprecated的。
- Web-Porlet模块:提供了用于Portlet环境和Web-Servlet模块的MVC的实现。
AOP。
AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,它让你可以定义例如方法拦截器和切点,从而将逻辑代码分开,降低它们之间的耦合性。利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中,这有点像.Net技术中的attribute概念。通过配置管理特性,Spring AOP模块直接将面向切面的编程功能集成到了Spring框架中,所以可以很容易地使Spring框架管理的任何对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
● Aspects模块提供了对AspectJ的集成支持。
● Instrumentation模块提供了class instrumentation支持和classloader实现,使得可以在特定的应用服务器上使用。
Test。
Test模块支持使用JUnit和TestNG对Spring组件进行测试。
总结
以上内容是Spring整体架构的简单介绍,只需要了解Spring 有哪些模块 ,这些模块提供哪些功能即可,重点的东西是先学会使用Spring,然后了解其运行的原理,以及使用的设计模式等。这些在以后的部分都会聊到。