了解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


        目录
        相关文章
        |
        15天前
        |
        XML 安全 Java
        |
        19天前
        |
        缓存 NoSQL Java
        什么是缓存?如何在 Spring Boot 中使用缓存框架
        什么是缓存?如何在 Spring Boot 中使用缓存框架
        27 0
        |
        1月前
        |
        数据采集 监控 前端开发
        二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
        医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
        |
        2月前
        |
        Java API 数据库
        构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
        【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
        58 4
        |
        2月前
        |
        JavaScript 安全 Java
        如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
        本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
        173 1
        |
        2月前
        |
        Java API 数据库
        Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
        本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
        41 0
        |
        1天前
        |
        IDE Java 测试技术
        互联网应用主流框架整合之Spring Boot开发
        通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
        19 5
        |
        11天前
        |
        缓存 Java 数据库连接
        Spring框架中的事件机制:深入理解与实践
        Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
        43 8
        |
        21天前
        |
        存储 Java 关系型数据库
        在Spring Boot中整合Seata框架实现分布式事务
        可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
        34 6
        |
        26天前
        |
        Java 数据库连接 数据库
        不可不知道的Spring 框架七大模块
        Spring框架是一个全面的Java企业级应用开发框架,其核心容器模块为其他模块提供基础支持,包括Beans、Core、Context和SpEL四大子模块;数据访问及集成模块支持数据库操作,涵盖JDBC、ORM、OXM、JMS和Transactions;Web模块则专注于Web应用,提供Servlet、WebSocket等功能;此外,还包括AOP、Aspects、Instrumentation、Messaging和Test等辅助模块,共同构建强大的企业级应用解决方案。
        47 2