Java框架:Spring

Spring是一个轻量级的开源Java框架,旨在简化企业应用程序开发。其核心特性包括控制反转(IOC)和面向切面编程(AOP),通过BeanFactory管理对象和依赖关系。Spring框架分为多个模块,如核心容器、数据访问/集成、Web支持、测试和AOP,支持JDBC、ORM、MVC、Web-Socket等。此外,Spring采用多种设计模式,如工厂、单例、代理和模板方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring概念

什么是Spring?

Spring是一个轻量级的开源框架, 主要是为了解决企业应用程序(J2EE)开发复杂性而创建(简化Java开发)。

为了降低Java开发的复杂性,Spring采取以下几种关键策略:

  1. 基于POJO的轻量级和最小侵入性编程;
  2. 通过依赖注入和面向接口实现松耦合;
  3. 基于切面进行声明式编程和减少样板代码。

Spring设计目标

Spring为开发提供一个一站式轻量级应用开发平台。

Spring设计理念

在JavaEE开发中,支持POJO和JavaBean开发方式,可以面向接口开发,通过IOC实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IOC容器管理,实现解耦。

Spring的核心

IOC容器和AOP模块。通过IOC容器管理POJO对象以及他们之间的联系;通过AOP以动态非侵入式的方式增强服务。

Spring应用场景

J2EE企业应用开发,包括SSH、SSM等。

二、Spring特征

  1. 轻量: 完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
  2. 控制反转(IOC- Inversion of Control ): Spring通过控制反转技术降低代码的耦合度,能把一个对象依赖的其他对象通过被动的方式传递进来(DI- Dependency Injection ),而不是这个对象自己创建或者查找依赖对象。 它的底层设计模式采用了工厂模式,所有的 Bean 都需要注册到Bean工厂中,将其初始化和生命周期的监控交由工厂实现管理。程序员只需要按照规定的格式进行Bean开发,然后利用XML文件进行bean 的定义和参数配置,其他的动态生成和监控就不需要调用者完成,而是统一交给了平台进行管理。
  3. 面向切面(AOP- Aspect Oriented Programming ): Spring支持面向切面的编程,并把业务逻辑与系统服务分开,开发人员只要注重业务逻辑就行。
  4. 容器: Spring包含管理应用对象(bean)的配置和生命周期,可以开发自己配置bean的创建、初始化、销毁等。 核心通过Bean factory实现了底层的类的实例化和生命周期的管理。
  5. 框架: Spring将简单的组件组成复杂的应用;对应用对象被声明的组合可以在XML文件里;提供多种功能,例如事务、其他框架的集成等。
  6. MVC: 客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。HandlerMapping将请求映射到对应的处理器Controller(相当于Action)在Spring 当中如果写一些处理器组件,一般实现Controller 接口,在Controller 中就可以调用一些Service 或DAO 来进行数据操作 ModelAndView 用于存放从DAO 中取出的数据,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在Spring 框架中还提供一个视图组件ViewResolver,该组件根据Controller 返回的标示,找到对应的view视图,将响应response 返回给用户。

三、Spring基本架构

3.1Spring体系结构

Spring 框架是是一个分模块存在,除了核心的Spring Core Container外是必要模块,其他20多个模块是可选的:

在这里插入图片描述

3.2Core Container(核心容器)

Core Container(核心容器):核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开 。


核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表达式语言-Spring Expression Language)等模块组成,它们的细节如下:

  • spring-core模块:提供了框架的基本组成部分,包括 IOCDI 功能。
  • spring-beans模块:提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。
  • spring-context模块:建立在由 spring-corespring-beans 模块的基础上建立起来的,它以一种类似于 JNDI 注册的方式访问对象。Context 模块继承自 Bean 模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过 Servelet 容器)等功能。Context 模块也支持 Java EE 的功能,比如 EJB、JMX 和远程调用等。ApplicationContext 接口是 Context 模块的焦点。spring-context-support 提供了对第三方集成到 Spring 上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
  • spring-expression块:提供了强大的表达式语言,用于在运行时查询和操作对象图。它是 JSP2.1 规范中定义的统一表达式语言的扩展,支持 set 和 get 属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从 Spring IoC 容器检索对象,还支持列表的投影、选择以及聚合等。

它们的依赖关系如图:

在这里插入图片描述

3.3Data Access/Integration(数据访问/集成)

数据访问/集成层包括 JDBC( Java Data Base Connectivity )ORM( Object Relational Mapping )OXM( Object XML Mapping )JMS( Java Message Service ) 事务处理模块,它们的细节如下:

  • JDBC模块:提供了 JDBC 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。
  • ORM模块:提供了对流行的对象关系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring的其它功能整合,比如前面提及的事务管理。
  • OXM模块:提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。
  • JMS模块:包含生产(produce)和消费(consume)消息的功能。从 Spring 4.1 开始,集成了 spring-messaging 模块。
  • 事务模块:为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。(注:编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法,声明式事务是通过注解(@Transactional)或配置由 spring 自动处理,编程式事务粒度更细)

3.4Web(MVC/Remoting)

Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:

  • Web 模块:提供面向 web 的基本功能和面向 web 的应用上下文,比如多部分(multipart)文件上传功能、使用 Servlet 监听器初始化 IOC 容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分。
  • Web-MVC模块:为 web 应用提供了模型视图控制(MVC)和 REST Web服务的实现。Spring 的 MVC 框架可以使领域模型代码和 web 表单完全地分离,且可以与 Spring 框架的其它所有功能进行集成。
  • Web-Socket模块:为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。
  • Web-Portlet模块:提供了用于 Portlet 环境的 MVC 实现,并反映了 spring-webmvc 模块的功能。

3.5Test(测试)

Test 模块:Spring 支持 Junit TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

3.6AOP(面向切面编程)

Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。

四、Spring主要jar包

  • org.springframework:spring-core:spring的核心,其他jar包依赖此包
  • org.springframework:spring-beans:所有应用都用到,包含访问配置文件,创建和管理bean等。
  • org.springframework:spring-aop:spring的面向切面编程,提供AOP的实现。
  • org.springframework:spring-context:提供在基础IOC功能上的扩展服务,还提供许多企业级服务的支持,例如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及多种视图层框架的支持。
  • org.springframework:spring-webmvc:包含spring mvc 应用开发时所需的核心类。
  • org.springframework:spring-web:包含web应用开发时,所需的核心类。
  • org.springframework:spring-jdbc:对JDBC的简单封装。
  • org.springframework:spring-tx:spring transaction,为JDBC、Hibernate、JDO、JPA提供一致的声明式和编程式事务管理。
  • org.springframework:spring-context-support:对spring context的扩展,用于MVC方面。
  • org.springframework:spring-expression:spring表达式语言
  • org.springframework:spring-jms:简化jms api的使用,简单的封装了一下。
  • org.springframework:spring-aspects:spring提供对AspectJ框架的整合。
  • org.springframework:spring-test:对Junit等测试框架等简单封装。
  • org.springframework:spring-orm:整合第三方orm的实现,例如hibernate、ibatis、jdo、jap等。
  • org.springframework:spring-oxm:sping对object/xml映射的支持,对java和xml来回切换。

五、Spring用到的设计模式

  1. 工程模式: BeanFactory就是简单工厂模式的实现,用来创建对象的实例。
  2. 单例模式: Bean的默认为单例模式。
  3. 代理模式: Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术。
  4. 模板方法: 用来解决代码重复问题,例如RestTemplate、JmsTemplate等。
  5. 观察者模式: 定义对象键一种一对多的依赖关系,当一个对象的状态发生改变,所有依赖于它的对象都会得到通知被动更新,例如Spring的listener的实现:ApplicationListener

六、Spring核心IOC和AOP

6.1IOC(控制反转)

6.1.1IOC概念

传统开发中,需要调用对象的时候,需要调用者手动来创建被调用者的实例,即对象是由调用者new出来的 。

在这里插入图片描述

Spring框架出来了,当对象依赖另一个对象,Spring框架自动帮你注入,实现了控制反转。Spring容器也就是IOC容器。

在这里插入图片描述

6.1.2IOC的实现

1.创建Maven项目,在pom.xml中导入相关依赖。

<!--        lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>compile</scope>
        </dependency>
        <!--解决冲突问题-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.2</version>
        </dependency>
    <!--      spring-context  -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.23</version>
        </dependency>

6.2AOP(面向切面)

6.2.1AOP概念

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值