Spring | Spring的基本应用

目录:

1.什么是Spring?

  • Spring 是由Rod Johnson组织和开发的一个分层的Java SE/EE full-stack (一站式 )轻量级开源框架。

  • Spring 以 IOC( Inversion of Control ,控制反转 )和 AOP ( Aspect Oriented Programming ,面向切面编程 )为 内核。

  • Spring 使用基本JavaBean 来完成以前 只可能由EJB ( Enterprise Java Beans,Java企业Bean )完成的工作,取代了EJB的臃肿、低效的开发模式。

  • Spring 致力于Java EE应用各层的解决方案。

    在 表现层 它提供了Spring MVC等功能;

    在 业务逻辑层 可以管理事务 、记录日志等;

    在 持久层 可以整合MyBatis 等技术。

  • 虽然Spring 贯穿于表现层 、业务逻辑层 和持久层 ,但它并不想取代 那些已有的框架,而是以高度的开放性与它们进行无缝整合。

2.Spring框架的优点

  • 非侵入式设计
    Spring 是一种非侵入式 ( non-invasive )框架 ,它可以使应用程序代码对框架的依赖最小化。

  • 方便解耦 、简化开发

    Spring就是一个大工厂 , 可以将所有对象的创建 和依赖关系的维护工作 都交给Spring容器
    管理 ,大大地降低了组件之间 的耦合性。

  • 支持AOP

    Spring提供了对AOP 的支持,它允许将一些通用任务 , 如安全 、事务 、日志 等进行集中
    处理 ,从而提高了程序的复用性。

  • 支持声明式事务处理

    只需要通过配置 就可以完成对事务的管理 ,而无须手动编程。

  • 方便程序的测试
    Spring 提供了对Junit4 的支持,可以通过注解方便地测试Spring程序。

  • 方便集成各种优秀框架

    Spring不排斥 各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持。

  • 降低JavaEE API的使用难度

    Spring对Java EE开发中非常难用的一些AP I (如JDBC 、JavaMail 等),都提供了封
    使这些API应用难度大大降低。

3.Spring的体系结构 (重点★★★) :

  • Spring框架 采用的是分层架构,它一系列的功能要素被分成20 个模块,这些模块大体分为
    Core Container (核心容器 )、 Data Access/Integration (数据访问/集成 )、 Web 、
    AOP ( Aspect Oriented Programming)、Instrumentation 、Messaging 和 Tes t。

    如下图所示。

3.1 Core Container (核心容器) ★★★

  • Spring 的核心容器 是其他模块建立的基础 ,它主要由①Beans模块 、②Core核心模块 、
    ③Context 模块 、④Context- support模块 和 ⑤SpEL ( Spring Expression Language, Spring表达式语言)模块组成。
Beans模块 (★★★) : BeanFactory

Beans模块 :提供了 BeanFactory, 是工厂模式 的经典实现,Spring将管理对象称为Bean。 ( BeanFactory 在下面详讲 )

Core核心模块 (★★★) : IOC

Core核心模块 :提供了Spring 框架的 基本组成部分,包括 IOC 和DI功能。

ps :
Spring 以IOC( Inversion of Control ,控制反转)和 AOP ( Aspect Oriented Programming ,面向切面编程 )为 内核。

Context上下文模块 (★★★) : ApplicationContext

Context上下文模块 : 建立在Core 和Beans 模块的基础 之上,它是访问定义 和配置 的任何对象 的媒介 。其中 ApplicationContext接口 是上下文模块 的焦点。

Context-support模块 (★★★)

Context-support模块 : 提供了对第三方库 嵌入Spring 应用的集成支持。

比如 缓存( EhCache、Guava、 JCache )、邮件服务( JavaMail)、任务调度( CommonJ、Quartz )和 模板引擎( FreeMarker、JasperReports、速率)。

SpEL模块

SpEL模块:是Spring 3.0 后新增的模块 ,它提供了 Spring Expression Language支持。

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

数据访问/集成层 包括JDBC 、ORM 、OXM 、JMS 和 Transactions 模块

JDBC模块 (★★★)

JDBC模块:提供了一个JDBC的抽象层 ,大幅度地减少了在开发过程中对数据库操作的编码。

ORM模块

ORM模块:对流行的对象关系映射API , 包括JPA 、JDO 和Hibernate 提供了集成层。

OXM模块

OXM模块:提供了一个支持对象 / XML映射 的抽象层实现 ,如JAXB 、Castor 、XMLBeans 、JiBX 和XStream。

JMS模块

JMS模块 : 指Java消息传递服务 ,包含使用和产生信息 的特性,自4.1版本后支持与Spring-message 模块的集成。

Transactions事务模块 (★★★)

Transactions事务模块 : 支持对实现特殊接口 以及所有POJO类 的编程和声明式的 事务管理。

3.3 Web

Spring 的 Web层 包括WebSocket 、Servlet、 Web 和Portlet模块。

WebSocket模块

WebSocket模块: Spring 4 .0以后新增的模块,它提供了WebSocket 和SockJS 的实现,以及对STOMP的支持。

Servlet模块 (★★★)

Servlet模块 : 也称为Spring -webmvc模块,包含了Spring 的模型 --视图 ---控制器 ( MVC) 和 REST Web Services 实现的 Web应用程序。

Web模块 (★★★)

Web模块 :提供了 基本的Web开发集成特性,例如:多文件上传功能 、使用Servlet监听器 来初始化loC容器以及Web应用上下文。

Portlet模块

Portlet模块 : 提供了在Portlet环境 中使用MVC实现 ,类似Servlet模块的功能。

3.4 其他模块

Spring的 其他模块 还有AOP 、Aspects 、 Instrumentation 、Messaging 以及Test模块。

AOP模块 (★★★)

AOP模块:提供了 面向切面编程 实现,允许定义方法拦截器 和切入点 ,将代码按照功能进行分离以降低耦合性

ps :
Spring 以IOC( Inversion of Control ,控制反转 )和 AOP ( Aspect Oriented Programming ,面向切面编程 )为 内核。

Aspects模块 (★★★)

Aspects模块:提供了与AspectJ 的集成功能 ,AspectJ 是一个功能强大 且成熟的 面向切面编 程( AOP )框架。

( Aspects 是一个AOP框架。)

Instrumentation模块

Instrumentation模块:提供了类工具 的支持 和类加载器的实现 ,可以在特定 的应用服务器中使用。

Messaging模块

Messaging模块: Spring 4.0 以后新增的模块 ,它提供了对消息传递体系结构 和协议.

Test模块 (★★★)

Test模块:提供了对单元测试 和集成测试的支持。

4.Spring的核心容器 :

  • Spring框架 的 主要功能 是通过其核心容器来实现的。

  • Spring 框架 提供了两种核心容器 : ① BeanFactory容器 ② ApplicationContext容器

  • 创建Spring容器 后,就可以获取Spring容器 中的Bean。Spring获得Bean的实例 有以下 两种方法:

    ① Object.getBean( String name)

    ② T getBean(Class requiredType)

4.1 BeanFactory 容器

  • BeanFactory 由org.springframework.beans.facytory.BeanFactory接口定义,是基础类型 的IOC容器,它提供了完整的loC服务支持。
  • BeanFactory 就是一个 管理Bean的工厂, 它主要负责初始化 各种Bean ,并调用 它们的生命周期方法。

4.2 ApplicationContext 容器

  • ApplicationContext 是BeanFactory的子接口,也被称为 应用上下文,是另一种常用 的Spring核心容器。
  • ApplicationContext 是org springframework.context.ApplicationContext 接口定义,不仅包含 了BeanFactory的所有功能 ,还添加了对国际化 、资源访问 、事件传播 等方面的支持。
4.2.1 创建ApplicationContext 容器 的方式
通过 ClassPathXmlApplicationContext 创建
  • 通过 ClassPathXmlApplicationContext 创建 :
    ClassPathXmlApplicationContext 会从==类路径 classPath == 中寻找指定的XML配置文件 ,找到并装载完 成ApplicationContext 的实例化工作,其使用语法如下。

  • 通过 ClassPathXmlApplicationContext 创建 语法 为 :

    java 复制代码
    ApplicationContext applicationContext = 
    new ClassPathXmlApplicationContext (String configLocation);

    上述代码中,configLocation 参数用于指定Spring 配置文件 的名称 和位置 。如果其值为

    "applicationContext.xml ",则Spring 会去 类路径 中查找 名称为applicationContext.xml 的配置文件。

通过 FileSystemXmlApplicationContext 创建
  • 通过 FileSystemXmlApplicationContext 创建 :
    FileSystemXmlApplicationContext 会从指定的文件系统路径 ( 绝对路径 )中寻找指定的XML
    配置文件 ,找到并装载完成 ApplicationContext的实例化工作。

  • 通过 FileSystemXmlApplicationContext 创建 语法为 :

    java 复制代码
    ApplicationContext applicationContext = 
    new FileSystemXmlApplicationContext (String configLocation);

    与ClassPathXmlApplicationContext 有所不同的是,FileSystemXmlApplicationContext 在读取Spring 的配置文件 时,不再从类路径 中读取配置文件,而是通过参数指定配置文件的位置 (通过绝对路径 来找),例如"D:/workspaces/applicationContext.xml" 。这种采用绝对路径的方式 ,会导致程序 的灵活性变差 ,所以 这个方法一般不推荐使用。

通过 ContextLoaderListener 创建 (通过web.xml配置文件创建) (★★★常用)
  • 在Web项目 中,ApplicationContext容器的实例化 工作会交由Web服务器来完成,Web服务器 实例化ApplicationContext 容器时,通常会使用基于 ContextLoaderListener 实现的方式,此种方式只需 要在web.xml中添加如下代码 :

    xml 复制代码
     <!--指定Spring配置文件的位置,多个配置文件时,以逗号分隔-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <!-- Spring将加载spring目录下的applicationContext . xml文件-->
            <!--    classpath: 以类路径的方式加载    -->
            <param-value> classpath:spring/applicationContext.xm1</param-value>
        </context-param>
    
        <!-- 指定以ContextLoaderListener方式启动Spring容器-->
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>

    通过在web.xml 中配置 ApplicationContext 的相关信息 ,Web服务器 会完成实例化的工作。

  • 在三大框架整合 以及项目 时,也将会基于ContextLoaderListener 的方式,由由Web服务器 来实例化ApplicationContext 容器 (web服务器来完成 ApplicationContext 容器的创建)。

4.2.2 获得Spring容器中Bean的方式 :

创建Spring容器 后,就可以获取Spring容器 中的Bean。Spring获得Bean的实例 有以下 两种方法:

  • Object .getBean ( String name):
    Object getBean (String name ) : 根据容器中Bean 的 id 或 name 来获取指定的Bean ,获取之后需要进行强制类型转。
  • T getBean(Class requiredType): 根据 类的类型 来获取Bean 的实例。由于此方法为泛型方法 ,因此在获取Bean之后不需要进行强制类型转换。
相关推荐
EatFan2 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
Maiko Star3 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
波力海苔夹心脆6754 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
现任明教教主~5 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
JavaGuide5 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel5 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
一条破秋裤5 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
布吉岛的石头5 小时前
Java 程序员第 49 阶段5:BERT 预训练目标 MLM+NSP 的工程含义
java·人工智能·深度学习·bert·transformer
摇滚侠6 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python