目录
- spring概述
- IOC/DI解释
- spring源码结构
1. spring概述
Spring 是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发,主要两个概念IOC和AOP
**IOC:**基本都是通过注册式的单例方式创建对象并维护已经创建的对象以及对象之间的关系,用户只需要关注业务逻辑,不需要关心对象的创建。
**AOP:**面向切面编程方式提供了日志记录、性能统计、安全控制、异常处理、事物控制等。提供一套JDBC访问实现,提供与第三方数据访问框架集成(mybatis、jpa),与J2EE规范的各种技术整合,提供了一套自己的web层框架spring MVC,还提供了许多和其他第三方简单集成的方式,是一个超级粘合平台。
2. IOC/DI解释
IOC:Inversion of Control 控制反转
是从容器的角度在描述,容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的资源
DI: Dependency Injection 依赖注入
是从应用程序的角度在描述,应用程序依赖容器创建并注入它所需要的外部资源
疑问
- Q1:参与者都有谁
主要有三方:某个对象、IOC/DI容器、某个对象的外部资源
- Q2:谁依赖谁
某个对象依赖于IOC/DI容器
- Q3:为什么需要依赖
某个对象需要IOC/DI容器来提供对象需要的外部资源
- Q4:谁注入于谁
IOC/DI容器将外部资源注入某个对象
- Q5:到底注入什么
某个对象需要的外部资源
- Q6:谁控制谁
IOC/DI容器控制对象
- Q7:控制什么
控制对象实例的创建
- Q8:为何叫反转
反向相对于正向来言,比如说A依赖于B的对象,正常时由A直接创建B对象,这就是正向,现在A不在主动去获取B对象,而是被动等待IOC/DI容器来注入。
小结:
IOC和DI对编程的最大改变不是从代码是,而是从思想上发生改变,主从换位,由原来的应用程序是老大,想获取什么资源都自己主动获取,现在改为应用程序被动接收对象,有IOC容器来创建并注入对象。
3. spring源码结构
3.1 系统架构图
3.2 代码模块说明
项目 | 说明 |
---|---|
spring-core | 包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心 |
spring-beans | 包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类,如果只需要IOC/DI功能,只需要引入core和beans包 |
spring-context | 构架于核心模块之上,他扩展了BeanFactory,为她添加了Bean 生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等,ApplicationContext 是该模块的核心接口,她是BeanFactory 的超类,与BeanFactory不同,ApplicationContext 容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。 |
spring-spel | 是统一表达式语言(unified EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等 |
spring-aop | 是Aop主要的实现模块在Spring 中,他是以JVM 的动态代理技术为基础,然后设计出了一系列的Aop 横切实现,比如前置通知、返回通知、异常通知等,同时,Pointcut接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入 |
spring-aspects | 主要是为Spring Aop 提供多种Aop 实现方法 |
spring-instrument | 是基于JAVA SE 中的"java.lang.instrument"进行设计的,应该算是Aop 的一个支援模块,主要作用是在JVM 启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现Aop 的功能。 |
spring-message | 为集成messaging api和消息协议提供支持。定义了消息Message(MessageHeader和body)、消息处理MessageHandler、发送消息MessageChannel。 |
spring-jdbc | Spring 提供的JDBC 抽象框架的主要实现模块,用于简化Spring JDBC。主要是提供JDBC 模板方式、关系数据库对象化方式、SimpleJdbc 方式、事务管理来简化JDBC 编程,主要实现类是JdbcTemplate、SimpleJdbcTemplate 以及NamedParameterJdbcTemplate |
spring-orm | ORM 框架支持模块,主要集成Hibernate, Java Persistence API (JPA) 和Java Data Objects (JDO) 用于资源管理、数据访问对象(DAO)的实现和事务策略 |
spring-oxm | 提供一个抽象层以支撑OXM(OXM 是Object-to-XML-Mapping 的缩写,它是一个O/M-mapper,将java 对象映射成XML 数据,或者将XML 数据映射成java 对象),例如:JAXB, Castor,XMLBeans, JiBX 和XStream 等。 |
spring-jms | (Java Messaging Service)能够发送和接受信息 |
spring-transactions | 是Spring JDBC 事务控制实现模块 |
spring-web | 为Spring 提供了最基础Web 支持,主要建立于核心容器之上,通过Servlet 或者Listeners 来初始化IoC 容器,也包含一些与Web 相关的支持。 |
spring-webmvc | 是一个的Web-Servlet 模块,实现了Spring MVC(model-view-controller)的Web 应用 |
spring-websocket | 模块主要是与Web 前端的全双工通讯的协议 |
spring-webflux | 5版本新加的功能,响应式、非阻塞、事件驱型web框架 |