前言
欢迎阅读本文!在这里,我们将简单介绍一下Spring的基本概念,以便您回答两个重要问题:什么是Spring以及为什么要学习Spring?
让我们开始吧!
Spring官方文档:https://docs.spring.io/spring-framework/docs/5.2.24.RELEASE/spring-framework-reference/
为什么需要学习 Spring?
简化企业级应用程序的开发,提高开发效率。在学习Java的路上需要学习Spring Boot。 Spring Boot 可以开箱即用,但理解如何使用它可能很困难。但我不知道为什么它有效。面试的时候一定会问到这个问题!在工作中也会派上用场!这就是为什么你需要学习它!知道了!
Spring 这个词,指的是什么?
术语“弹簧”根据上下文具有不同的含义。这可以用来指向Spring Framework 项目本身,这就是梦想开始的地方。
然后,随着时间的推移,基于Spring Framework 构建的其他项目也出现了。当人们说春天时,他们通常指的是一系列的项目。然而,在本系列中,我们将仅参考Spring 框架本身。
Spring框架分为模块,应用程序可以选择自己需要的模块。核心容器模块包括配置模型和依赖注入机制。此外,Spring框架还为消息、事务数据、持久化、Web开发等不同类型的应用程序架构提供基本支持,并与基于Servlet的Spring MVC Web框架并行运行。框架。
Spring 的模块
事实上,Spring Framework 由大约20 个模块组成。这些模块分为核心容器、数据访问/集成、Web、AOP(面向方面编程)、仪表板、消息传递和测试等。正如这张来自官网的照片所示,
Core Container(核心模块)
当我们谈论Spring 的核心容器时,我们指的是构成该框架基础的模块。这些模块包括spring-core、spring-beans、spring-context、spring-context-support 和spring-express。
首先,我们来了解一下spring-core 和spring-beans 模块。它们提供了一些基本功能,其中最重要的是“IoC(控制反转)”和“依赖注入”。简而言之,IoC 允许您将对象的创建和管理卸载到框架,而不是自己手动创建和管理它们。依赖注入是将对象之间的依赖关系注入到彼此之间的过程,允许您实现对象之间的隔离。
此外,BeanFactory 是工厂模式的复杂实现,它消除了编写单例模式的需要,并允许您将对象配置和规范与实际的程序逻辑分开。
接下来是Context (spring-context) 模块,它构建在Core 和Beans 模块之上。 Context 模块提供了一种访问对象的方法,类似于Java 命名和目录接口(JNDI) 注册表。 Context模块除了继承Beans模块的功能外,还增加了对国际化、事件传播、资源加载等功能的支持。您还可以透明地创建上下文,例如通过servlet 容器。此外,Context 模块还支持多种Java EE 功能,例如Enterprise Java Bean (EJB)、Java 管理扩展(JMX) 和基本远程处理。在Context模块中,ApplicationContext接口是我们感兴趣的对象。此外,spring-context-support 模块还支持将常见的第三方库集成到Spring 应用程序上下文中,特别是在缓存(EhCache、JCache)和调度(CommonJ、Quartz)方面。
最后,我们有spring-express 模块。它提供了一种强大而灵活的表达式语言,用于在运行时查询和操作对象图。该语言是JSP 2.1 规范的统一表达语言(Unified EL) 的扩展。支持设置和获取属性值、属性赋值、方法调用、访问数组、集合和索引器的内容、逻辑运算符、算术运算符、命名变量等。 Spring IoC 容器还允许您按名称检索对象。此外,表达式语言支持列表投影、选择和常见列表聚合操作。
AOP 和 Instrumentation
spring-aop 模块是Spring 框架的一部分,用于实现面向方面的编程,遵循AOP 联盟标准。
那么什么是面向方面编程呢?简单来说,它允许你在代码中为方法定义拦截器和切入点,使你可以将某些功能与实际业务逻辑分离,从而实现更清晰的代码结构和更好的模块化。例如,如果您需要在代码中引入日志记录、安全检查和性能监控代码,则可以使用AOP 将此代码作为横切问题引入,而不是将其分散到不同的业务逻辑中。 AOP 通过将这些常见的横切关注点定义为方面并将它们应用到适当的方法来实现代码隔离和重用。
此外,Spring 还提供了另一个spring-aspects 模块用于与AspectJ 集成。 AspectJ 是一个强大的AOP 框架,它与Spring 的集成允许您使用AspectJ 更高级的功能来实现更复杂的切面编程。
还有一个名为spring-instrument 的模块。它提供类检测和类加载器实现支持,并且可用于某些应用程序服务器。该模块的功能是提供几种工具和机制来在运行时修改和扩展类以实现特定的需求。例如, spring-instrument-tomcat 模块是Tomcat 服务器的具体实现,它为检测提供代理机制。
Messaging
Spring 4 引入了一个名为spring-messaging 的模块。该模块包含Spring Integration 项目的核心抽象,例如Message、MessageChannel 和MessageHandler。该模块的目的是为消息应用程序提供基本支持。
spring-messaging 模块允许您构建基于消息传递的应用程序,其中各种组件通过消息进行通信。以下是一些重要的概念和功能:
消息:消息是在应用程序中传递的数据单元。可以包含有关消息内容和元数据的信息。 MessageChannel:消息通道是应用程序内传递消息的路径。充当发送者和接收者之间的中介。 MessageHandler:消息处理程序是负责接收和处理消息的组件。它可以执行特定的业务逻辑或将消息转发到其他组件。 Spring-messaging 模块还引入了一组用于将消息映射到方法的注释,类似于Spring MVC 基于注释的编程模型。这允许您通过简单的注释来定义如何处理消息,使您的代码更清晰、更容易理解。
Data Access/Integration
在处理数据时,Spring 的数据访问/集成层提供的模块可以更轻松地与数据库和其他数据源进行交互。
spring-jdbc模块简化了与数据库交互的过程。它提供了一个抽象层,允许您使用更简单且更易于理解的代码来执行数据库操作,而无需处理繁琐的细节。 spring-tx 模块支持事务管理。事务是一种用于确保数据一致性和完整性的机制。 Spring的事务管理模块允许您以编程方式或声明方式管理事务,从而更轻松地处理数据更改和操作。 spring-orm 模块提供与对象关系映射(ORM)框架的集成。 ORM 是一种将数据库中的数据映射到对象的技术,允许以面向对象的方式操作数据库。 Spring 的ORM 模块允许您轻松集成流行的ORM 框架(Hibernate、MyBaits 等),并将它们与其他Spring 功能(例如简单的声明式事务管理)相结合。 spring-oxm 模块提供对对象和XML 之间映射的支持。它对于将Java 对象转换为XML 格式以及将XML 转换回Java 对象非常有用。这在处理XML 相关数据时非常有用。 spring-jms 模块用于处理Java 消息服务。提供生成和使用消息的功能。从Spring Framework 4.1 版本开始,它还集成了spring-messaging 模块,使开发基于消息传递的应用程序更加方便。
Web
web层由spring-web、spring-webmvc等模块组成。
spring-web 模块提供基本的Web 功能。这包括处理MultipartFile 上传和使用servlet 侦听器初始化IoC 容器的能力。该模块还包括与Web 相关的部分,例如用于与HTTP 客户端和其他Web 服务通信的Spring 远程处理支持。 spring-webmvc 模块(也称为Web-Servlet 模块)是Spring 框架中用于构建Web 应用程序的重要模块。实施模型-视图-控制器(MVC) 架构和RESTful Web 服务。 Spring MVC 允许您将业务逻辑代码与Web 表单清晰地分离,使您的代码更有组织性和可维护性。该模块与其他Spring 功能无缝集成,可以轻松构建具有依赖注入和事务管理等功能的灵活且可扩展的Web 应用程序。
Test
spring-test模块支持使用JUnit或TestNG对Spring组件进行单元和集成测试,提供一致的Spring ApplicationContext加载和缓存机制,并提供Mock对象以方便测试。
Spring 的历史
Spring框架诞生于2003年,以应对早期J2EE规范的复杂性。尽管有些人认为Java EE 和Spring 是竞争对手,但实际上它们是互补的。 Spring 编程模型不包含Java EE 平台规范,而是集成了从EE 保护伞下精心挑选的各个规范。
Servlet API (JSR 340) WebSocket API (JSR 356) 并发实用程序(JSR 236) JSON 绑定API (JSR 367) Bean 验证(JSR 303) JPA (JSR 338) JMS (JSR914) 以及可选的事务协调JTA/JCA 设置。 Spring框架还支持依赖注入(JSR330)和通用注释(JSR250)规范,开发人员可以选择使用这些规范而不是Spring框架提供的特定机制。
从Spring Framework 5.0 开始,Spring 需要最低Java EE 7 级别(Servlet 3.1+、JPA 2.1+ 等),并支持在运行时使用新的Java EE 8 级别API(Servlet 4.0、JSON Binding API 等)进行开发。优惠。开箱即用的集成。这使得Spring 与Tomcat 8 和9、WebSphere 9 和JBoss EAP 7 等服务器完全兼容。
Java EE 在应用程序开发中的作用随着时间的推移而不断发展。在Java EE 和Spring 的早期,编写应用程序是为了部署到应用程序服务器。现在,在Spring Boot 的帮助下,应用程序以DevOps 和云友好的方式创建,具有嵌入式servlet 容器,并且可以轻松修改。从Spring Framework 5 开始,WebFlux 应用程序可以在非servlet 容器(例如Netty)上运行,而无需直接使用servlet API。
Spring不断创新、不断成长。除了Spring Framework之外,还有Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch等项目。
Spring 设计理念
在学习框架时,了解框架的作用及其遵循的原则同样重要。 Spring框架的基本原理是:
在各个级别提供选择:Spring 让您可以尽可能长时间地推迟设计决策。例如,您可以通过配置切换应用程序连接到的数据库,而无需更改代码。这同样适用于许多其他基础设施问题和第三方API 集成。容纳不同的观点:Spring非常灵活,没有固定的方法来解决你的应用程序的需求。它提供了多种方法来完成同一任务,以适应不同开发人员的不同观点和需求。保持强大的向后兼容性:Spring框架经过精心设计,最大限度地减少对现有代码的影响。这意味着即使您升级到新版本,您的应用程序也可以继续成功运行,而不必担心框架更新带来的问题。 Spring 还支持多个Java 开发工具包(JDK) 版本和第三方库,因此您可以继续使用Spring 来开发和维护您的应用程序。专注API设计:Spring团队花费了大量的时间和精力来设计直观、易于理解、稳定、可靠的API。我们努力保持API 跨版本和年份的一致性,以便我们更容易理解和使用API。为代码质量建立高标准:Spring框架重视清晰准确的文档注释。这是少数几个具有清晰代码结构并且包之间没有循环依赖关系的项目之一。这种高水平的代码质量有助于提高框架的可维护性和可扩展性。
所以什么是 Spring?
Spring 是一个轻量级开源Java 框架,它实现了控制反转(IoC) 和面向方面编程(AOP) 等功能。
Spring官方网站上的简介将其描述为“构建企业级应用程序的一站式框架”。
易于开发:Spring的组件化和松散耦合的特性使开发变得更加容易,使开发人员能够更加专注于业务逻辑的实现。可测试性:Spring的代码结构和依赖注入机制使其易于测试。易于集成:Spring的可插拔架构使得与其他框架和组件的集成变得很容易。易于部署:部署Spring应用程序非常容易,开发人员只需将应用程序打包成war包并将其部署到支持Java应用程序的服务器上即可。 Spring框架包括以下模块:
核心容器:包含IoC、DI(依赖注入)、事件、资源、国际化、验证、数据绑定、类型转换、SpEL和AOP等核心功能。 AOP:支持面向方面的编程。工具(Instrumentation):为JMS、JCA、JMX、电子邮件、任务调度和缓存等提供一组工具和支持。数据访问/集成:包括对JDBC、ORM 框架(Hibernate、MyBatis 等)事务处理、DAO 等的支持。 Web:包括对Web 应用程序开发的支持,例如Spring MVC 和Spring WebFlux 网络框架。测试:包括对JUnit、TestNG 等的支持。
没有 Spring 和有 Spring 的区别
如何简化体现在哪里?下面,我将写一个代码示例,以便大家能够理解其中的区别,来直观地演示Spring是如何简化开发过程的。
对象管理
如果没有Spring,Java EE 开发的主要方法是使用JSP、Servlet 和EJB 等技术。请考虑一下。我刚开始学习JSP的时候,没有框架,一切都是我自己做。
对于系统中多个对象之间的关系,如果没有Spring,您必须手动创建和管理对象之间的依赖关系。
这句话对于初学者来说可能很难理解。让我们举个例子。
设计的系统中有两个类:Employee和Department(用于描述员工和部门信息的类)。
雇员.java:
public class Employee { private int id; //省略getter 和setter。
public classDepartment { private int id; //省略getter和setter
未使用 Spring 的时候
当前业务前提是输出员工部门信息,需要手动管理它们之间的依赖关系。
public class Main { public static void main(String[] args) { Department Department=new Department(1, 'Just do IT') Employee=new Employee(1, 'god23bin', Department); (employee.getDepartment (). getName()); }} 创建Employee 对象时,必须自己创建一个Department 对象(因为Employee 对象依赖于Department 对象),并将Department 对象与Employee 对象关联起来。正确的。现在,坐在屏幕前的人们现在了解了什么是对象之间的依赖关系的手动创建和管理。
使用 Spring 的时候
如果你使用Spring,则根本不需要这样做。我们将继续这个示例,但使用Spring 进行操作并将对象管理留给Spring。
@Configurationpublic class AppConfig { @Bean publicDepartment() { return newDepartment(1, 'Just do IT') } @Bean public Employeeemployee() { return new Employee(1, 'god23bin', plan()); 创建一个AppConfig 类。我在类上使用了@Configuration注解来表明这是一个配置类。
然后我编写了两个方法,分别返回雇员对象和部门对象,并在方法上使用@Bean注释来指示方法返回的对象由Spring IoC管理。
这两个对象都是通过调用构造函数方法创建的,并将Department 对象插入到Employee 对象中。 (最好理解为注入或者setXxx方法)
上面介绍概念的时候,有一个概念叫“容器”,但是人们习惯把这个容器称为“IOC容器”。 Spring 实际上使用它来存储和管理应用程序中传递的所有对象。
该容器包含Department 和Employee 对象。
目前,您只需要输出员工的部门信息即可。无需手动创建员工对象。您也不必自己创建新的部门对象。
通过AnnotationConfigApplicationContext加载配置类AppConfig,并通过getBean方法获取Employee对象。在这个过程中,Spring完成了依赖注入的作用。
public class Main { public static void main(String[] args) { ApplicationContext context=new AnnotationConfigApplicationContext(AppConfig.class) Employee=context.getBean(getName()); 但实际上,不要使用像这样。也就是说,不要手动编写context.getBean() 等代码,而是通过依赖注入直接使用它们。我稍后会写这个。现在您可以看到发生了什么。
当然,由于篇幅有限,你可能还不明白这样做的好处,可能会有各种各样的疑问,但是如果你继续慢慢学习,一定能够解决的。
其他的管理
如果没有Spring,您必须手动处理代码中一些与业务逻辑无关的问题,例如连接池和事务管理。使用Spring,您可以通过Spring的API和组件来解决这些问题,使您的代码更加简洁和可读。
总结
弹簧
ing 是一个很牛的、开源的 Java 框架,实现了 IoC(Inversion of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)等功能。 Spring 的核心特点包括便于开发、便于测试、便于集成和便于部署,啥都方便。 Spring 框架的出现简化了 Java EE(Enterprise Edition)开发的过程。在没有使用 Spring 的情况下,开发 Java EE 应用程序需要手动创建和管理对象之间的依赖关系,而使用 Spring 可以通过配置和注解来实现对象的自动管理和依赖注入。Spring 还提供了许多其他模块和功能,如数据访问/集成、Web 开发支持、AOP、工具等,使开发人员可以更加便捷地开发企业级应用程序。 总之,学习 Spring 可以帮助我们更好地理解和应用现代企业级 Java 开发的基本概念和最佳实践,提高开发效率和代码质量 原文链接:https://www.cnblogs.com/god23bin/p/what-is-spring.html 版权声明:本文转载于网络,版权归作者所有,如果侵权,请联系本站编辑删除