了解Spring框架

简介: 1.了解Spring框架 2.了解Spring的体系结构 3.认识Spring家族 4.实现第一个Spring入门程序

 

1.了解Spring框架

1.什么是Spring框架?

Spring是一个轻量级的控制反转(IoC)和面向切面的容器框架。

关键词概念解释:

    • 1.轻量级:从大小和开销两方面来说,Spring都是轻量级的,完整的Spring框架可以在只有一个1MB多的jar文件中发布,并且Spring是非侵入式的,也就是说Spring应用中的对象并不依赖于Spring的特定类
    • 2.控制反转:Spring通过控制反转(IoC)降低了耦合,IoC能够让一个对象依赖的其他对象通过被动的方式传递过来,而不是这个对象自己进行创建或者寻找其他依赖对象
    • 3.面向切面:允许通过分离应用的业务逻辑与系统级的服务进行内聚式的开发,应用对象只实现它们应该做的。并不负责其他的比如日志和事务的支持
    • 4.容器:Spring包含并且管理应用对象的配置和生命周期,在这个意义上它是一种容器,用户可以通过配置自己的每一个Bean,用户的Bean可以创建一个单独的实例或者每次都需要生成一个新的实例,以及他们之间是如何相互关联的
    • 5.框架:Spring可以将简单的组件配置、组合成复杂的应用。在Spring中,应用对象被声明式得组合

    2.Spring框架有什么优点?

      1. 降低代码的耦合度
      2. 提供了依赖注入(DI)和控制反转(IoC)的功能,使得对象的创建和组装更加灵活和可配置。
      3. 支持面向切面编程(AOP),可以通过切面进行代码的横切关注点的处理,提高了代码的模块化和可维护性。
      4. 提供了一套完整的企业级开发解决方案,包括数据访问、事务管理、MVC框架等,简化了开发流程。
      5. 整合了各种常用的开源技术和第三方库,如Hibernate、MyBatis、JPA、Redis等,方便开发者进行集成和使用。
      6. 提供了强大的异常处理机制,可以通过统一的异常处理方式进行全局的异常处理和错误信息的处理。

      2.了解Spring的体系结构

      Spring的功能模块被分割成了20个模块中,这些模块分布在核心的容器、数据访问集成、Web、AOP、植入、消息传输和测试,如下图所示

      image.gif编辑

      下面介绍其中的模块与功能

      1.核心容器

      Spring的核心容器是由其他模块建立的,由Spring-core、Spring-beans、Spring-context、Spring-context-support、Spring-expression 等。

      模块 功能
      Spring-core 提供Spring框架的核心基础,包括依赖注入机制、Bean生命周期管理和资源加载等。
      Spring-beans 定义、创建、管理和解析Bean对象,支持配置文件和注解方式进行配置和实例化。
      Spring-context 扩展了Spring-beans模块,提供事务管理、面向切面编程、事件处理、国际化等高级功能,管理应用程序上下文。
      Spring-context-support 辅助模块,提供与特定环境的集成支持,如Java EE、缓存和任务调度等。
      Spring-expression 提供强大的表达式语言,用于动态处理和访问对象的属性,支持统一的表达式语法。

      2.AOP(面对切面编程) 和 Instrumentation(植入)

      Spring框架中AOP和Instrumentation相关的模块有Spring--aop模块、Spring-aspect模块、以及Spring-instrument模块

      模块 功能
      Spring-aop 提供面向切面编程(AOP)的支持,允许将横切关注点从业务逻辑中分离出来。它通过代理模式和动态代理技术实现,可以在运行时对方法进行拦截和增强,实现例如日志记录、性能监控等功能。
      Spring-aspect 扩展了Spring-aop模块,提供了基于注解的切面编程的支持。使用Spring-aspect模块,开发人员可以通过注解方式来定义切面,并实现相应的拦截和增强逻辑。
      Spring-instrument 提供了与Java Instrumentation API的集成支持,用于在运行时修改字节码或者进行类加载的控制。它可以用于实现一些高级的AOP功能,如基于字节码的切面编程、动态类加载等。

      3.消息

      Spring4.0后框架中增加了消息Spring-messaging模块

      模块 功能
      Spring-messaging 提供了基于消息的通信模型的支持,用于构建异步、松耦合的应用程序。它包含了一些核心接口和类,如Message、MessageHandler等,以及消息代理、消息队列和消息转换器等功能。

      4.数据访问/集成

      数据访问/集成由JDBC、ORM、OXM、JMS和事务模块组成

      模块 功能
      Spring-jdbc 提供了对JDBC(Java数据库连接)的支持,简化了与关系型数据库的交互。它提供了一组简单、一致的API,用于执行SQL操作、处理事务以及管理连接池等功能。
      Spring-tx 提供了对事务的支持,简化了在Spring应用程序中使用事务的配置和管理。它包括声明式事务的支持,通过注解或XML配置来定义事务边界,以及编程式事务的支持,通过编程方式控制事务的开始、提交和回滚等操作。
      Spring-orm 提供了对对象关系映射(ORM)的支持,简化了将Java对象与关系数据库之间进行映射的工作。它支持各种ORM框架(如Hibernate、MyBatis等),提供了一组统一的API,用于定义对象映射、执行查询、插入、更新和删除等操作,以及处理事务和缓存等功能。
      Spring-oxm 提供了对对象-XML映射(OXM)的支持,方便Java对象与XML文档之间的转换。它支持各种XML处理库(如JAXB、Castor等),提供了一组统一的API,用于对象到XML的序列化和反序列化,以及处理XML文档的校验、转换和映射等功能。
      Spring-jms 提供了对Java消息服务(JMS)的支持,简化了在Spring应用程序中使用消息传递的配置和开发。它包括发送和接收消息、定义消息监听器以及与消息代理的集成等功能。通过Spring-jms,可以实现与消息队列的通信和异步消息处理。

      5.Web

      Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成

      模块 功能
      Spring-web 提供了基本的Web支持,包括与Servlet容器的集成、Web应用上下文的配置以及处理Web请求和相应等功能。它提供了一组通用的Web工具类和辅助方法,用于处理URL解析、文件上传、Cookie、Session等操作。
      Spring-webmvc 提供了基于MVC(Model-View-Controller)的Web框架,用于构建灵活和可扩展的Web应用程序。它包括控制器、视图解析器、数据绑定、验证、消息转换和异常处理等功能,使开发者能够更轻松地实现业务逻辑与页面展示的分离。
      Spring-websocket 提供了对WebSocket协议的支持,用于构建实时的Web应用程序。它包括WebSocket会话管理、消息处理和广播等功能,允许客户端和服务器之间进行全双工的通信。WebSocket可以实现实时推送、聊天应用、股票行情等场景。
      Portlet 提供了对JSR-286 Portlet规范的支持,用于构建基于Portlet容器的Web应用程序。它提供了一组与Portlet规范对应的类和接口,简化了在Portlet环境下开发Web应用程序的工作。开发者可以通过Portlet模块将Spring的特性应用于Portlet应用。

      6.测试

      测试由Spring-test模块组成

      Spring-test功能:

        1. 提供了用于创建和配置Spring应用程序上下文的工具类和注解,如@ContextConfiguration和ApplicationContextInitializer等,方便在测试中加载Spring配置文件或配置类。
        2. 提供了用于模拟和控制外部依赖的工具类和注解,如@MockBean和@SpyBean等,用于创建模拟对象或代理对象,以便在测试中进行依赖注入和模拟方法调用。
        3. 提供了用于执行HTTP请求和验证响应的工具类和注解,如@AutoConfigureMockMvc和MockMvc等,方便测试Web层的请求和响应。
        4. 提供了用于执行数据库操作和管理事务的工具类和注解,如@DirtiesContext和TransactionalTestExecutionListener等,用于在测试中管理数据库事务和数据准备。
        5. 提供了用于编写和运行集成测试的工具类和注解,如@SpringBootTest和@TestPropertySource等,方便进行完整的应用程序集成测试。

        3.认识Spring家族

        在Spring的官网中可以看到Spring中有许多的成员模块,而这些模块组合起来就构成了整个Spring框架

        image.gif编辑

        下面就介绍一下Spring的家族成员

        Spring家族成员 相关作用
        Spring Framework 提供了依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、Web开发等功能
        Spring Boot 基于Spring Framework的快速应用程序开发框架,简化了Spring应用程序的搭建和配置
        Spring Data 提供了与不同数据存储技术集成的模块,简化了数据访问层的开发
        Spring Security 提供了身份验证、授权、密码加密等功能,用于保护应用程序的安全性
        Spring Cloud 用于构建分布式系统和微服务架构的工具集合
        Spring Integration 用于构建企业级集成解决方案的框架,支持与外部系统交互、消息传递、数据转换等功能
        Spring Batch 用于处理大规模批量作业的框架,适用于数据清洗、ETL处理等场景
        Spring WebFlux 基于反应式流和非阻塞IO的Web开发框架,提供了更高的吞吐量和可扩展性
        Spring Mobile 用于开发移动应用程序的工具集合,支持设备适配、移动网络处理和推送通知等功能

        4.实现第一个Spring入门程序

        条件:Tomcat服务器、Maven构建工具、

        Tomcat服务器下载:

        通过Idea部署Tomcat服务器(细图文教学)_idea tomcat 自动部署_Alphamilk的博客-CSDN博客

        Maven构建工具下载:

        Maven构建工具下载与配置(图文详细)_Alphamilk的博客-CSDN博客

        需要准备四个基本包(core、beans、context、expression)和common-logging包

        设置依赖

        </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-core</artifactId>
              <version>5.0.2.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-beans</artifactId>
              <version>5.0.2.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-context</artifactId>
              <version>5.0.2.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-expression</artifactId>
              <version>5.0.2.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>commons-logging</groupId>
              <artifactId>commons-logging</artifactId>
              <version>1.2</version>
            </dependency>
          </dependencies>

        image.gif

        创建一个UsrDao接口

        package org.example;
        public interface UsrDao {
            public void show();
        }

        image.gif

        创建实现类

        package org.example;
        import org.springframework.stereotype.Repository;
        @Repository("usrDao")
        public class UsrDaoImp implements UsrDao{
            @Override
            public void show() {
                System.out.println("UsrDao showing");
            }
        }

        image.gif

        创建UsrService接口

        package org.example;
        public interface UsrService {
            public void show();
        }

        image.gif

        创建UsrService实现接口

        package org.example;
        import org.springframework.stereotype.Service;
        import javax.annotation.Resource;
        @Service("usrService")
        public class UsrServiceImp implements UsrService {
            @Resource(name = "usrDao")
            private UsrDao usrDao;
            @Override
            public void show() {
                this.usrDao.show();
                System.out.println("UserService Now");
            }
        }

        image.gif

        在当前目录下创建beans.xml配置

        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
               xmlns:context="http://www.springframework.org/schema/context"
        >
            <context:component-scan base-package="org.example" />
            <bean id="usrDao" class="org.example.UsrDaoImp" />
        </beans>

        image.gif

        最后做一个测试类

        package org.example;
        import org.springframework.context.ApplicationContext;
        import org.springframework.context.support.ClassPathXmlApplicationContext;
        public class Test {
            public static void main(String[] args) {
                String xmlPath = "org.example/beans.xml";
                ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
                UsrService usrService = (UsrService) applicationContext.getBean("usrService");
                usrService.show();
            }
        }

        image.gif


        目录
        相关文章
        |
        12月前
        |
        安全 Java Ruby
        我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
        作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
        772 2
        |
        XML JSON Java
        Spring框架中常见注解的使用规则与最佳实践
        本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。
        |
        Java Spring
        聊聊你对SpringBoot框架的理解 ?
        SpringBoot是Spring家族中流行的子项目,旨在简化Spring框架开发的繁琐配置。它主要提供三大功能:starter起步依赖简化依赖管理,自动配置根据条件创建Bean,以及内嵌Web服务器支持Jar包运行,极大提升了开发效率。
        394 0
        |
        11月前
        |
        安全 前端开发 Java
        《深入理解Spring》:现代Java开发的核心框架
        Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
        |
        11月前
        |
        消息中间件 缓存 Java
        Spring框架优化:提高Java应用的性能与适应性
        以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
        869 8
        |
        12月前
        |
        监控 Kubernetes Cloud Native
        Spring Batch 批处理框架技术详解与实践指南
        本文档全面介绍 Spring Batch 批处理框架的核心架构、关键组件和实际应用场景。作为 Spring 生态系统中专门处理大规模数据批处理的框架,Spring Batch 为企业级批处理作业提供了可靠的解决方案。本文将深入探讨其作业流程、组件模型、错误处理机制、性能优化策略以及与现代云原生环境的集成方式,帮助开发者构建高效、稳定的批处理系统。
        938 1
        |
        安全 Java 微服务
        Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
        本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
        1116 1
        |
        NoSQL Java 数据库连接
        SpringBoot框架
        Spring Boot 是 Spring 家族中最流行的框架,旨在简化 Spring 应用的初始搭建与开发。它通过自动配置、起步依赖和内嵌服务器三大核心功能,大幅减少配置复杂度,提升开发效率。开发者可快速构建独立运行的 Web 应用,并支持多种数据访问技术和第三方集成。
        |
        缓存 安全 Java
        Spring 框架核心原理与实践解析
        本文详解 Spring 框架核心知识,包括 IOC(容器管理对象)与 DI(容器注入依赖),以及通过注解(如 @Service、@Autowired)声明 Bean 和注入依赖的方式。阐述了 Bean 的线程安全(默认单例可能有安全问题,需业务避免共享状态或设为 prototype)、作用域(@Scope 注解,常用 singleton、prototype 等)及完整生命周期(实例化、依赖注入、初始化、销毁等步骤)。 解析了循环依赖的解决机制(三级缓存)、AOP 的概念(公共逻辑抽为切面)、底层动态代理(JDK 与 Cglib 的区别)及项目应用(如日志记录)。介绍了事务的实现(基于 AOP
        518 0
        |
        Cloud Native Java API
        Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
        Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
        1810 0