现在对于Spring框架只停留在会用但不知其为啥这么用的阶段,为了知其所以然,准备每天扣一点源码来理解。不积跬步无以至千里,我一天扣一点,总有一天会扣完的。因为这个系列是记录自己第一次细看源码地学习Spring框架,难免会表现生涩。所以文中可能有话语表达有误,有我自己的主观表达,各位发现有问题的地方,还请指出。
spring的学习参考了https://www.javadoop.com/,还有b站上的资源。
Spring整体架构
1.1 Spring整体架构
Spring是一个分层架构,被分为了大约20个模块。
-
core container(核心容器)
-
Core
包含了Spring框架的基本的核心工具类,例如各种转换器(不止是其他模块可用,我们自己也可以使用这些类),这些内容也是其他模块所依赖的。
-
Beans
该模块是所有应用都要用到的,包含了访问配置文件、创建和管理bean以及进行ioc/di操作相关的所有类。
-
Context
该模块是构建于core和beans模块之上的。提供了一种类似1的框架式的对象访问方法。Context模块继承了Beans的特性,有资源绑定、事件传播、资源加载、和对Context的透明创建的支持。Context也支持J2EE的一些特性,如EJB、JMX和基础的远程处理。ApplicationContext是Context模块的关键。
-
Expression Language
提供了一个强大的表达式语言用于在运行时查询和操纵对象。该语言支持设置/获取属性的值,属性的分配,方法的调用,访问数组上下文、容器和索引器,逻辑和算术运算符,命名变量以及从Spring的IoC容器红根据名称检索对象。
-
-
Data Access/Integration(数据访问/集成)
- JDBC 提供了一个JDBC抽象层,可以消除冗长的JDBC编码和解析数据库厂商特有的错误代码。该模块包含Spring对JDBC数据访问进行封装的所有类。
- ORM 为对象-关系映射API,例如JPA、Hibernate、Mybatis等,提供了交互层,利用ORM封装包,可以使用所有Spring提供的特性进行O/R映射。
- OXM 提供了一个object/XML映射实现的抽象层,包括JAXB、Castor、XMLBeans、JiBX和XStream。
- JMS 主要包含了一些制造和消费消息的特性。
- Transaction 支持编程和声明性的事务管理,这些事务类必须实现特定的接口,并且对所有的POJO都适用。
-
Web
- Web
- Web-servlet
- Web-Struts
- Web-Porlet
-
AOP
- Aspects模块提供了对AspectJ的集成支持。
- Instrumentation模块提供了class instrumentation支持和classloader实现,使得可以再特定的应用服务器上使用
-
Test
支持使用JUnit和TestNG对Spring组件进行测试。
下一步,我们将通过配置文件方式获取bean
JNDI 是Java命名与目录接口,是EJB的特性之一,在J2EE中是重要的规范之一。JNDI功能类似把资源或者对象放到目录里面,然后通过资源名或者对象属性我们可以在这个‘目录’中找到相应的资源。例如:没有JNDI之前,传统的jdbc链接数据库我们会在代码中写入driver、url、username、password等属性,这样不利于我们后期对于这些属性值的维护。通过JNDI我们可以用xml文件配置上面的各种属性值,然后通过读取xml文件,获取到这些配置。(首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。) ↩︎