Spring | Spring的基本应用

目录:

    • 1.什么是Spring?
    • 2.Spring框架的优点
    • 3.Spring的体系结构 (重点★★★) :
      • 3.1 Core Container (核心容器) ★★★
        • Beans模块 (★★★) : BeanFactory
        • Core核心模块 (★★★) : IOC
        • Context上下文模块 (★★★) : ApplicationContext
        • Context-support模块 (★★★)
        • SpEL模块
      • 3.2 Data Access / Integration (数据访问/集成)
        • JDBC模块 (★★★)
        • ORM模块
        • OXM模块
        • JMS模块
        • Transactions事务模块 (★★★)
      • 3.3 Web
        • WebSocket模块
        • Servlet模块 (★★★)
        • Web模块 (★★★)
        • Portlet模块
      • 3.4 其他模块
        • AOP模块 (★★★)
        • Aspects模块 (★★★)
        • Instrumentation模块
        • Messaging模块
        • Test模块 (★★★)
    • 4.Spring的核心容器 :
      • 4.1 BeanFactory 容器
      • 4.2 ApplicationContext 容器
        • 4.2.1 创建ApplicationContext 容器 的方式
          • 通过 ClassPathXmlApplicationContext 创建
          • 通过 FileSystemXmlApplicationContext 创建
          • 通过 ContextLoaderListener 创建 (通过web.xml配置文件创建) (★★★常用)
        • 4.2.2 获得Spring容器中Bean的方式 :

1.什么是Spring?

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

  • SpringIOC( 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开发中非常难用的一些API (如JDBC、JavaMail 等),都提供了封
    使这些API应用难度大大降低

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

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

    在这里插入图片描述

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框架的 基本组成部分,包括 IOCDI功能。

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

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

Context上下文模块 : 建立在CoreBeans模块的基础之上,它是访问定义配置任何对象媒介。其中 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 (数据访问/集成)

数据访问/集成层包括JDBCORMOXMJMSTransactions 模块

JDBC模块 (★★★)

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

ORM模块

ORM模块:对流行的对象关系映射API, 包括JPAJDOHibernate提供了集成层

OXM模块

OXM模块:提供了一个支持对象/ XML映射抽象层实现,如JAXBCastorXMLBeansJiBXXStream

JMS模块

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

Transactions事务模块 (★★★)

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

3.3 Web

SpringWeb层 包括WebSocketServletWebPortlet模块。

WebSocket模块

WebSocket模块: Spring 4.0以后新增的模块,它提供了WebSocketSockJS的实现,以及对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的 其他模块 还有AOPAspectsInstrumentationMessaging以及Test模块

AOP模块 (★★★)

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

ps :
SpringIOC( 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容器中的BeanSpring获得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 容器

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

  • 通过 ClassPathXmlApplicationContext 创建 语法 为 :

    ApplicationContext applicationContext = 
    new ClassPathXmlApplicationContext (String configLocation);
    

    上述代码中,configLocation 参数用于指定Spring 配置文件名称位置。如果其值为
    applicationContext.xml",则Spring会去 类路径查找名称为applicationContext.xml配置文件

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

  • 通过 FileSystemXmlApplicationContext 创建 语法为 :

    ApplicationContext applicationContext = 
    new FileSystemXmlApplicationContext (String configLocation);
    

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

通过 ContextLoaderListener 创建 (通过web.xml配置文件创建) (★★★常用)
  • Web项目中,ApplicationContext容器的实例化工作会交由Web服务器来完成Web服务器实例化ApplicationContext容器时,通常会使用基于 ContextLoaderListener 实现的方式,此种方式只需要在web.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容器中的BeanSpring获得Bean的实例有以下 两种方法

  • Object.getBean( String name):
    Object getBean(String name) : 根据容器中Beanidname 来获取指定的Bean,获取之后需要进行强制类型转
  • T getBean(Class requiredType): 根据 类的类型获取Bean的实例。由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Erlang进阶学习】4、进程与消息传递

在Erlang系统中&#xff0c;进程都是轻量级的&#xff0c;意味着创建进程只需要花费微不足道的时间和极少的内存。 1、进程间不共享内存&#xff0c;而是通过消息传递来通信。 2、消息从发送进程的栈上复制到接收进程的堆上。 3、由于多个进程并发地在独立的内存空间执行&#…

RocketMQ- 深入理解RocketMQ的消息模型

1、RocketMQ客户端基本流程 ​ RocketMQ基于Maven提供了客户端的核心依赖&#xff1a; <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.9.5</version> </dependency&…

PyQt6 QCheckBox复选框按钮控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计33条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

idea通过remote远程调试云服务器

引用了第三方的包&#xff0c;调试是看不到运行流程&#xff0c;于是想到了idea的remote方法 -agentlib:jdwptransportdt_socket,servery,suspendn,address9002 写一个.sh文件并启动 nohup java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address9002 ./demo.j…

思维模型 韦伯-费希纳定律

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。感觉与刺激成对数关系。 1 韦伯-费希纳定律的应用 1.1 韦伯-费希纳定律在工业设计中的应用 1 苹果公司的 iPhone 设计 苹果公司的 iPhone 设计是韦伯-费希纳定律在工业设计中的经典应用之…

剑指 Offer(第2版)面试题 15:二进制中1的个数

剑指 Offer&#xff08;第2版&#xff09;面试题 15&#xff1a;二进制中1的个数 剑指 Offer&#xff08;第2版&#xff09;面试题 15&#xff1a;二进制中1的个数解法1&#xff1a;位运算解法2&#xff1a;n & (n - 1)相关题目 剑指 Offer&#xff08;第2版&#xff09;面…

详解SpringAop开发过程中的坑

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

1-算法基础-编程基础

1.基本数据类型 char ch A; char s[] "hello";2.const定义常量 const int N 1e5 9;//const定义常量&#xff0c;后续不可被修改 int a[N];3.万能头文件 C11等可用 #include<bits/stdc.h> using namespace std;4.typedef typedef long long kk; kk a[20…

手敲MyLinkedList,简单了解其运行逻辑

1.LinkedList的介绍和结构 LinkedList的底层是双向链表结构&#xff0c;相对于之前的单向无头非循环链表来说&#xff0c;LinkedList最大的区别就是该链表可以增加了一条链接逻辑&#xff0c;可以从最后一个节点通过地址访问来到整个链表的头结点。 通过以下集合框架&#xff0…

计算机毕业设计 基于Web的铁路订票管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Fiddler抓包工具之高级工具栏中的重定向AutoResponder的用法

重定向AutoResponder的用法 关于Fiddler的AutoResponder重定向功能&#xff0c;主要是时进行会话的拦截&#xff0c;然后替换原始资源的功能。 它与手动修该reponse是一样的&#xff0c;只是更加方便了&#xff0c;可以创建相应的rules&#xff0c;适合批处理的重定向功能。 …

tar文件覆盖漏洞 CVE-2007-4559

文章目录 前言原理例题 [NSSRound#7 Team]新的博客方法一 手搓文件名方法二 python脚本 前言 做到[NSSRound#6 Team]check(Revenge)时发现是tar文件覆盖&#xff0c;但是对概念和执行过程理解不够深就光光记住脚本&#xff0c;所以在做本题[NSSRound#7 Team]新的博客时打算重新…

数据链路层之VLAN基本概念和基本原理

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

笔记-基于CH579M模块通过网线直连电脑进行数据收发(无需网络)

刚学习&#xff0c;做个记录。 基于CH579M模块通过网线直连电脑进行数据收发(无需网络) 目录 一、工具1、CH579模块2、 网线3、电脑以及网络调试工具 二、操作步骤1、TCP/UDP等程序下载以及设置以太网IP2、网络断开3、检查以太网是否正常显示并稳定4、打开网络调试助手进行测试…

揭秘原型链:探索 JavaScript 面向对象编程的核心(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【Android】Android Framework系列--Launcher3桌面图标加载流程

Launcher3桌面加载流程 Android Launcher3(简称Launcher&#xff09;启动后会加载桌面。基于Android12代码&#xff0c;分析一下桌面加载的流程。 一些相关的概念&#xff1a; WorkSpace&#xff1a;桌面。在桌面上可以添加快捷方式、Hoseat或Dock&#xff08;就是手机或者车…

项目中遇到的半导体公司

作为一个技术人&#xff0c;我并不是亲美&#xff0c;从技术的实事求是角度讲&#xff0c;不得不感叹欧美的半导体技术。他们的datasheet能学到的东西太多太多&#xff1b;我甚至佩服他们缜密的逻辑。从他们的文章中领悟我们技术到底有多low&#xff0c;没办法一个一个了解所有…

【重点】【双指针】11. 盛最多水的容器

题目 注意&#xff1a;二维接雨水&#xff0c;有墙的&#xff0c;有线的&#xff0c;着这个属于线的。 class Solution {public int maxArea(int[] height) {if (height.length < 2) {return 0;}int left 0, right height.length - 1, res 0;while (left < right) {…

avue-crud中时间范围选择默认应该是0点却变成了12点

文章目录 一、问题二、解决三、最后 一、问题 在avue-crud中时间范围选择&#xff0c;正常默认应该是0点&#xff0c;但是不知道怎么的了&#xff0c;选完之后就是一直是12点。具体问题如下动图所示&#xff1a; <template><avue-crud :option"option" /&g…

Linux文件系统 -- inode和block

目录 重要参数目录项fsck软连接&#xff0c;硬链接 重要参数 dumpe2fs /dev/sda1|more查看ext4文件元数据&#xff08;描述文件系统的数据&#xff09;&#xff0c;xfs_info查看xfs文件系统 superblock&#xff1a;超级块&#xff0c;记录此file system的整体信息&#xff0c…