Spring 前世今生
一切从Bean开始
Spring 初衷
spring是一个轻量的控制反转和面向切面的容器框架。spring是为解决企业级应用开发的复杂性而设计的。它的根本目的是:简化开发,spring立志于全方面简化java的开发。主要通过4种策略,3种方式实现。
- 4种策略:
- 基于POJO的轻量级和最小侵入式编程
- 通过依赖注入和接口编程解耦合
- 基于切面和惯性进行声明式编程
- 通过切面和模板减少板式代码
- 3种方式:面向Bean编程(BOP)、依赖注入(DI)、面向切面编程(AOP)。
面向Bean编程(Bean Oriented Programming):Spring 是面向 Bean 的编程,Bean 在 Spring 中才是真正的主角。SpringIOC 容器,负责创建、配置和管理Bean,并维护各种Bean对象之间的依赖关系。
依赖注入(Dependency Injection):容器自动装配Bean对象时,会把有依赖关系的对象通过属性或构造函数传递过来。
IOC(Inversion of Control)即控制反转是指由容器控制业务对象之间的依赖关系,而非代码直接控制。好处实现了解耦,降低了业务对象之间的依赖。IOC在spring中有两种实现策略,依赖注入DI和依赖查找DL(DL因为不常用,Spring后来将它移除),所以Spring中的IOC也称为DI。Spring 设计的核心是org.springframework. beans 包(架构核心是 org.springframework.core包),它的设计目标是与 JavaBean 组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是 BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系,它实现了IOC的模式。BeanFactory 支持两个对象模型:
1,单例模型(singleton):提供了具有特定名称的全局共享实例对象,可以在查询时对其进行检索。singleton是默认的也是最常用的对象模型。
2,原型模型(prototype):确保每次检索都会创建单独的实例对象。在每个用户都需要自己的对象时,原型模型最合适。
Bean 工厂的概念是 Spring 作为 IOC 容器的基础。IOC 则将处理事情的责任从应用程序代码转移到框架。
面向切面编程(Aspect Oriented Programming):面向切面编程是一种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想。AOP 的核心构造是方面(切面),它将那些影响多个类的行为封装到可重用的模块中。
切面(Aspect):通常是一个类(实现了某些共有功能),里面可以定义切入点和通知。
连接点(JoinPoint):就是程序在运行过程中能够插入切面的地点,一般是方法调用。
通知(Advice)):在特定的切入点上执行的增强处理,是切面的具体实现。可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)与环绕通知(Around)5种。实际应用中通常是切面类中的一个方法。
切入点(PointCut):就是带有通知的连接点,在程序中主要体现为书写切入点表达式AOP 框架创建的对象,实际就是使用代理对目标对象功能增强。Spring 中的 AOP 代理可以使是JDK 动态代理,也可以是 CGLIB 代理,前者基于接口,后者基于子类
AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。
AOP 编程的常用场景有:Authentication(权限认证)、Auto Caching(自动缓存处理)、Error Handling(统一错误处理)、Debugging(调试信息输出)、Logging(日志记录)、Transactions(事务处理)等。
Spring基本架构、模块说明和模块依赖关系
spring模块架构图
spring模块功能说明
spring模块依赖关系
spring源码构建
操作系统win10
第一步从GitHub下载相应版本的spring源码,这里以5.0.2.RELEASE为例。下载地址
https://github.com/spring-projects/spring-framework/tree/v5.0.2.RELEASE
第二步下载安装对应版本的gradle,在解压后的源码build.gradle文件搜索gradleVersion可以获取spring对应的gradle版本,v5.0.2.RELEASE对应的gradle版本是4.3.1
下载地址https://gradle.org/next-steps/?version=4.3.1&format=all
第三步配置gradle环境变量
1.配置GRADLE_HOME
2.配置path
3.测试gradle是否配置成功,配置成功输入gradle -v会显示版本信息,如下图
第四步,命令行进入到spring源码解压文件,运行gradle,构建成功会出现 BUILD SUCCESSFUL信息(如果失败可重新运行gradle,一般是网络问题),如下图所示
第五步,打开IntelliJ IDEA,选择import Project
1.导入项目
2.选择gradle
3.勾上圈起来的地方
4.等待构建
5.验证构建完成
IDEA构建完成 [spring-build-src]会变粗。还有一种验证方式是:找到 ApplicationContext 类,按 Ctrl + Shift + Alt + U,出现类图界面说明构建成功。如下图所示