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


        目录
        相关文章
        |
        14天前
        |
        前端开发 Java 数据库连接
        Spring框架初识
        Spring 是一个分层的轻量级开源框架,核心功能包括控制反转(IOC)和面向切面编程(AOP)。主要模块有核心容器、Spring 上下文、AOP、DAO、ORM、Web 模块和 MVC 框架。它通过 IOC 将配置与代码分离,简化开发;AOP 提供了声明性事务管理等增强功能。
        59 21
        Spring框架初识
        |
        3月前
        |
        XML 安全 Java
        |
        4月前
        |
        缓存 NoSQL Java
        什么是缓存?如何在 Spring Boot 中使用缓存框架
        什么是缓存?如何在 Spring Boot 中使用缓存框架
        162 0
        |
        1天前
        |
        人工智能 开发框架 Java
        重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
        重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
        重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
        |
        5天前
        |
        存储 人工智能 开发框架
        Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
        第二届开放原子大赛 Spring AI Alibaba 应用框架挑战赛决赛于 2 月 23 日在北京圆满落幕。
        |
        2月前
        |
        SQL Java 数据库连接
        对Spring、SpringMVC、MyBatis框架的介绍与解释
        Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
        128 29
        |
        21天前
        |
        XML Java 开发者
        通过springboot框架创建对象(一)
        在Spring Boot中,对象创建依赖于Spring框架的核心特性——控制反转(IoC)和依赖注入(DI)。IoC将对象的创建和管理交由Spring应用上下文负责,开发者只需定义依赖关系。DI通过构造函数、setter方法或字段注入实现依赖对象的传递。Spring Boot的自动配置机制基于类路径和配置文件,自动为应用程序配置Spring容器,简化开发过程。Bean的生命周期包括定义扫描、实例化、依赖注入、初始化和销毁回调,均由Spring容器管理。这些特性提高了开发效率并简化了代码维护。
        |
        3天前
        |
        存储 人工智能 开发框架
        Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
        Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
        |
        2月前
        |
        开发框架 运维 监控
        Spring Boot中的日志框架选择
        在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
        |
        3月前
        |
        设计模式 XML Java
        【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
        本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
        【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能