暑假回国隔离中,想来自学一下java框架,以免实习的时候一问三不知。目前对开发的印象就是大二的时候在实验室,有mapper还有一些别的xml文件,当时就是简单的运用数据库、注册api之类的。虽然在写代码,但是没有一个总体对框架的概念。当年应该是简单的Mybatis,最近看了看决定还是从最popular的Spring开始看吧,过程可能很煎熬,毕竟想要同步看用法和源码。之前看hashmap源码的时候就在想,如果当时自学java查用法的时候顺手就把数据结构的源码看了,是不是未来会方便很多。Anyway就在blog记录一下自学Spring的进程啦,真就从0开始呗!
IDEA读Spring源码环境搭建:https://blog.csdn.net/bskfnvjtlyzmv867/article/details/81171802
Spring教程推荐:https://www.w3cschool.cn/wkspring/
相关名词
IoC Inversion of control 反转控制:Spring负责控制对象的生命周期和对象之间的关系
DI Dependency Injection 依赖注入:解耦合,组件之间的依赖关系由容器在运行期间决定
Singleton 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点
JNDI Java Naming and Directory Interface Java命名与目录接口
J2EE Java 2 platform Enterprise Edition
JSP Java Server Pages
JDBC Java DataBase Connectivity: 一种用于执行Sql语句的API
DAO Data Access Object: 一个面向对象的数据库接口
ORM Object/Relational Mapping
OXM Object/XML Mapping
JMS Java Message Service
POJO Plain Ordinary Java Object: 普通java类,与EJB(Enterprise Java Beans)对应
OOP Object-Oriented Programming 面向对象编程:面向名词,旨在用正确的语义描述世界,而关系数据库旨在从数学的角度更有效的进行数据存储和管理
AOP Aspect-Oriented Programming 面向切面编程:面向动词,对各业务进行隔离,通过预编译和动态代理实现程序功能的统一维护
MVC model-view-controller
Spring 整体架构
Spring是一个企业级开发框架,是软件设计层面的框架,两大核心机制是 IoC/DI 和 AOP 。企业级项目特点主要是:
- 大规模:用户数量多,数据规模大,功能模块众多,团队需要交互
- 业务复杂
- 性能和安全要求高
- 灵活多变:需求变化多
Spring架构是分层架构,可以将应用程序进行分层,优势是允许开发者在每一层选择一个适用的组件:
MVC: Struts2, Spring MVC
ORM: Hibernate, MyBatis, Spring Data//持久层,与数据库相关联
主要由Core Container、Data Access/Integration、Web、AOP和Test模块组成。
Spring 的优点:
- 低侵入式设计
- 独立于各种应用服务器
- 依赖注入特性将组件关系透明化,降低了耦合度
- 面向切面编程特性允许将通用任务进行集中式处理
- 与第三方框架的良好整合
Core Container
从程序逻辑中分离出正确的依赖关系和配置
- Core
- Beans 访问配置文件,创建和管理所有类
- Context 提供一种类似于JNDI注册器的框架式对象访问方法
- Expression Language 用于在运行时查询和操作对象的表达式语言
Data Access/Integration
- JDBC 对JDBC数据访问进行封装
- ORM 为对象-关系映射API提供了一个交互层,解决OO和OR不匹配问题
- OXM 提供了一个对Object/XML映射实现的抽象层
- JMS 主要包含制造和消费信息的特征
- Transaction 支持编程和声明性的事务管理,对所有POJO都适用
Web
- Web
- Web-Servlet 清楚区分模型代码与web forms,包含MVC(model-view-controller)实现
- Web-Struts 提供对Struts Web层的支持
- Web-Porlet 提供porlet环境和MVC实现
AOP
- Aspects 提供对AspectJ的集成支持
- Instrumentation 提供 class instrument支持和classloader实现
Test
支持JUnit和TestNG对Spring组件进行测试