Spring是一个开源的Java应用程序开发框架,它提供了一个综合的编程和配置模型,用于构建现代化的企业级应用程序。Spring的目标是简化Java开发,并提供了许多功能和特性,以提供开发效率、降低开发复杂性。
特别 | 主要功能 |
IoC容器 | IoC容器负责对象的创建和管理,实现了控制反转(IoC)和依赖注入(DI)模式。降低了对象之间的耦合性。 |
AOP支持 | 通过将横切关注点(如日志、事务)与核心业务逻辑分离,实现了代码的模块化和可重用性。 |
声明式事务管理 | 通过配置注解或XML,可将事务逻辑从业务代码中分离出来,实现了事务的一致性和可靠性。 |
表 Spring框架的主要特点及功能
Spring框架的核心是IoC和AOP。
1 IoC
IoC 控制反转(Inversion of Control),它不是一门技术,而是一种设计思想(模式)。能够指导我们如何设计出松耦合、更优良的程序。
图 传统方式为ClassA创建依赖对象
上面的createInterfaceB()方法表面上缓解了ClassA与InterfaceB具体类的耦合关系,但实质上代码耦合并没有改变。
通过IoC模式可以彻底解决这种耦合,它把耦合从代码中移出去,放到统一的XML文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中(依赖注入 DI)。
IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分离(通过文本的配置文件进行应用程序组件间相互关系的配置,从而不用重新修改并编译具体的代码)。
“控制反转” 的核心是容器帮我们查找及注入依赖的对象,对象只是被动地接收依赖对象。
1.1 实现策略
IoC中最基本的技术就是“反射”编程。根据给出的类名(字符串)来生成对象。
Spring实现IoC模式是通过依赖注入的方式:容器全权负责组件的装配,它会把符合依赖关系的对象通过JavaBean属性(设置方法注入)或构造函数(构造器注入)传递给需要的对象。
2 AOP
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程。是一种设计模式。
OOP 面向对象编程 | 针对业务处理过程的实体及其属性和行为进行抽象封装,以便获得更加清晰高效的逻辑单元划分。(面向对象) |
AOP 面向切面编程 | 针对业务处理过程中的切面进行提取,所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。(面向过程) |
表 OOP 与AOP的对比
2.1 为什么要用AOP
在开发中,往往在业务基础代码上还需要做其他操作,比如记录日志、对参数进行校验等。我们可以采用代理模式来实现这一需求。但是在系统中需要做额外操作的位置比较多,而且做得额外处理可能不一样,如果为这些位置单独写个动态代理类,则会造成代理类过多,及造成系统业务混乱。
我们需要一个统一处理这些代理的地方,来管理这些代理对象及代理方法等。AOP就是用来实现这个效果的。
图 AOP切入
2.2 AOP 的组成
AOP 主要由切面(Aspect)组成。
切面(Aspect):切入到指定方法的代码片段称为切面(上面的权限验证、参数校验及日志记录插入到指定方法的代码片段)。切面由切点和处理组成。
切点(Pointcut):用于指定某个处理应该在何时被调用。切点是用来维护一组连接点的。
连接点(Join Point):在应用执行过程中能够插入切面点一个点(指在被插入代码中的位置)。
处理(Advice):即需要增强指定方法功能的片段(上面的权限验证、参数校验及记录日志)。
3 初始化Spring应用
在实际开发Sping项目中,我们往往不会手动创建项目的目录结构和定义构建规范的各个步骤,而是通过Spring InitiaLizr来初始化Spring项目。
3.1 Spring Initializr
Spring Initializr是一个基于浏览器的Web应用,同时也是一个REST API,它能生成一个Spring项目结构的骨架。
图 IDEA 中使用Spring Initializr初始化Spring Boot项目
图 Spring Initializr 生成的pom.xml
3.2 JAR和WAR
JAR:Java归档(Java Archive),是一种用于打包Java类、资源文件和元数据的标准格式。它可以将所有需要的类和资源打包到一个文件中,并通过Java虚拟机来运行。
WAR:是Web Archive到缩写,是一种用于打包Web应用程序的标准格式。可以包含Java类文件、JSP页面、HTML页面等其他Web资源文件。通常用于将Web应用部署到Web服务器中。
JAR | WAR | |
部署方式 | 可以在任何JAVA环境中运行。但无法直接在Web容器中部署(缺乏Web.xml文件)。 | 专门用于Web应用程序部署的。可以直接部署在Web容器中。部署时直接将WAR文件放到容器webapps目录下,容器在启动时会自动解压WAR文件。 |
适用场景 | 开发独立应用程序,如桌面应用或命令行工具。不适用Web应用程序。 | 专门用于Web应用程序的打包和部署。 |
优点 | 部署简单、可独立运行、轻量级 | 适合WEB应用程序,支持JSP页面。 |
缺点 | 不适合Web应用程序。不支持JSP页面。 | 部署复杂、依赖Web容器、体积更大 |
表 JAR和WAR的区别