什么是Spring
Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring 框架除了自己提供功能外,还提供整合其他技术和框架的能力。
Spring 的狭义和广义
在不同的语境中,Spring 所代表的含义是不同的。下面我们就分别从“广义”和“狭义”两个角度,对 Spring 进行介绍。
广义的 Spring:Spring 技术栈
广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。
经过十多年的发展,Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,其中 Spring Framework 是其他子项目的基础。
这些子项目涵盖了从企业级应用开发到云计算等各方面的内容,能够帮助开发人员解决软件发展过程中不断产生的各种实际问题,给开发人员带来了更好的开发体验。
狭义的 Spring:Spring Framework
狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。
Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。
Spring 有两个最核心模块: IoC 和 AOP。
IoC:Inverse of Control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理。
AOP:Aspect Oriented Programming 的简写,译为“面向切面编程”。AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。
什么是IOC(控制反转)?
•IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。
Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。
IoC 容器是 Spring 框架中最重要的核心组件之一,它贯穿了 Spring 从诞生到成长的整个过程。 在传统的面向对象编程中,对象的创建和依赖关系通常由应用程序代码显式地管理。例如,如果一个对象需要依赖于另一个对象,那么通常是在这个对象的构造函数或某个方法中创建并传递它的依赖。这样的做法可能导致高度耦合的代码,使得代码难以扩展和维护。
而在IOC中,应用程序的控制权被反转了。具体来说,控制权的反转包括以下两个方面:
- 依赖的注入:在IOC中,对象的依赖关系由容器负责管理和注入,而不是由对象自己负责创建和管理它们的依赖。容器会根据配置或注解信息,自动将依赖对象注入到需要它们的对象中。这样,对象不再关心如何获取依赖对象,而只需要声明需要依赖哪些对象即可。
- 对象的生命周期管理:在IOC容器中,对象的生命周期也由容器来管理。容器负责创建、初始化、销毁对象,开发者不需要手动管理对象的生命周期,使得对象的创建和销毁过程更加简化和集中化。
通过IOC的使用,代码的耦合性降低了,对象之间的依赖关系变得松散,使得代码更加灵活、可扩展和可维护。同时,IOC也为各种设计模式(如工厂模式和依赖注入)的实现提供了基础。
什么是AOP(面向切面编程)?
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,用于在软件开发中解耦和管理横切关注点(Cross-Cutting Concerns)。横切关注点是指那些在应用程序中散布于各个模块、层和组件的功能或行为,例如日志记录、安全性、事务管理等,它们与核心业务逻辑(纵向关注点)的实现无关,但在整个应用程序中起到共享的作用。
AOP通过将横切关注点从业务逻辑中剥离出来,然后将其模块化地定义为“切面”(Aspect),从而实现了横切关注点与纵向关注点的分离。在实际编程中,开发者通过使用AOP框架,如Spring AOP,在特定的切入点(Join Point)上将切面织入到应用程序中。
重要的AOP概念:
- 切面(Aspect) :切面是横切关注点的抽象描述,它定义了在哪些切入点(Join Point)上执行什么样的操作。例如,一个日志记录切面可以在应用程序的所有方法执行前后输出日志信息。
- 切入点(Join Point) :切入点是应用程序中的特定位置,例如方法调用或异常抛出。切面会在切入点上执行特定的操作。
- 通知(Advice) :通知是切面中定义的实际操作,它描述了在切入点上执行的行为。AOP框架支持不同类型的通知,包括前置通知(Before)、后置通知(After)、返回通知(AfterReturning)、异常通知(AfterThrowing)和环绕通知(Around)。
- 连接点(Join Point) :连接点是程序执行过程中可以插入切面的点。在Java中,连接点通常是方法的调用或方法的执行。
- 切点(Pointcut) :切点是指在哪些连接点上应用特定的切面。切点通过表达式或模式来描述连接点的匹配规则。
AOP的优势在于它能够将横切关注点与核心业务逻辑解耦,避免了重复代码和散乱的关注点。这样,AOP能够提高代码的可维护性、可重用性和可扩展性。例如,在一个多层架构的应用程序中,通过AOP将事务管理从业务代码中抽离,使得业务逻辑更加纯粹,并且可以灵活地在不同模块中共享相同的事务处理逻辑。
总结:
作为一个萌新,文章有什么描述不对或不足的地方还请大家多多指正