工作两三年之后,总感觉什么东西都懂,但是什么东西又都不会。所以日常学习是很有必要的,俗话说学而不思则罔 ,思而不学则殆。所以我们要学思结合,学习的方法有很多,但是思考的深度或者说有没有思考最好的体现方式就是输出。本系列以开发日常中用的最多的框架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 源码第一步就是需要从github上下载构建源码,地址:https://github.com/spring-projects/spring-framework.git
springframework 是使用gradle 构建的 构建方式比较简单,这里不再多说,如果有读者构建失败,可以留言。
spring框架是一个分层的架构,它包含了一系列的功能,并被分成了20多个模块。
core Container(核心容器) 它包含了 Core、Beans、Context、Expression Language
Core 模块是Spring框架的核心基础,是其他模块的工具类,包含cglib 和asm等工具集。
Beans 模块是所有应用都要用到的,它包含访问配置文件,创建和管理bean以及IOC/DI操作相关类
Context 模块构建于Beans和Core模块之上,提供了类似于JNDI注册器的框架式访问对象的方法。Contex在Beans的基础上扩展了很多功能例如国际化、事件传播、资源加载等。ApplicationContext 在此模块上。
此模块提供了强大的表达式语言在运行时查询和操纵对象。它是JSP 2.1规范中定义的unifed expression language的一个扩展。该语言支持设置/获取属性的值,属性的分配,方法的调用,访问数组上下文(accessiong the context ofarrays)、容器和索引器、逻辑和算术运算符、命名变量以及从Spring的IoC容器中根据名称检索对象。它也支持list投影、选择和一般的list聚合。
这一部分主要是包含数据访问对象关系映射,JMS 消息以及事务等内容
Web 模块
Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以, Spring框架支持与Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。Web层包含了Web、Web-Servlet、Web-Struts和Web-Porlet模块,具体说明如下。
AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,它让你可以定义例如方法拦截器和切点,从而将逻辑代码分开,降低它们之间的耦合性。利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中,这有点像.Net技术中的attribute概念。通过配置管理特性,Spring AOP模块直接将面向切面的编程功能集成到了Spring框架中,所以可以很容易地使Spring框架管理的任何对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
● Aspects模块提供了对AspectJ的集成支持。
● Instrumentation模块提供了class instrumentation支持和classloader实现,使得可以在特定的应用服务器上使用。
Test模块支持使用JUnit和TestNG对Spring组件进行测试。
以上内容是Spring整体架构的简单介绍,只需要了解Spring 有哪些模块 ,这些模块提供哪些功能即可,重点的东西是先学会使用Spring,然后了解其运行的原理,以及使用的设计模式等。这些在以后的部分都会聊到。