Spring学习指南

news2024/9/22 7:14:01

文章目录

  • Spring是什么
    • Spring 的诞生与发展
    • Spring 的狭义和广义
      • 广义的 Spring:Spring 技术栈
      • 狭义的 Spring:Spring Framework
    • Spring Framework 的特点
      • 方便解耦,简化开发
      • 方便集成各种优秀框架
      • 降低 Java EE API 的使用难度
      • 方便程序的测试
      • AOP 编程的支持
      • 声明式事务的支持
  • 为什么要用Spring?
    • 为什么要用Spring
    • Spring 为我们做了哪些事情?
    • 假如没有 Spring ?
  • Spring体系结构
    • 1. Data Access/Integration(数据访问/集成)
    • 2. Web模块
    • 3. Core Container(Spring的核心容器)
    • 4. AOP、Aspects、Instrumentation和Messaging
    • 5. Test模块
  • Spring开发环境搭建
    • 一、环境
    • 二、包目录介绍
    • 三、创建maven项目
    • 四、去掉无用警告
    • 五、修改UTF-8编码
    • 六、去掉无用提示
    • 七、在maven中配置JDK版本
    • 八、导入Spring相关依赖
    • 九、编写HellWorld
    • 十、创建Spring配置文件
    • 十一、创建启动类
    • 十二、执行结果
  • 第一个Spring程序
    • 一、创建maven项目
    • 二、导入Spring依赖
    • 三、导入junit
    • 四、创建HelloWorld
    • 五、创建bean.xml文件
    • 六、单元测试
  • Spring IoC容器
    • 控制反转(IoC)
    • 依赖注入(DI)
    • IoC 的工作原理
    • IoC 容器的两种实现
      • BeanFactory
        • 示例 1
      • ApplicationContext
        • 示例 2
    • Spring BeanFactory 容器
      • Spring 的 BeanFactory 容器
    • Spring ApplicationContext 容器
      • Spring ApplicationContext 容器
  • Spring Bean定义
    • Bean 定义
    • Spring 配置元数据
    • 实例化 Bean
      • 使用构造函数进行实例化
      • 使用静态工厂方法进行实例化
        • 1、创建工厂类
        • 2、在spring配置文件中配置
        • 3、获得bean对象
      • 使用实例工厂方法进行实例化
    • Spring Bean属性注入
      • 构造函数注入
        • 示例
      • setter 注入
        • 示例
    • Spring注入内部Bean
      • setter 方式注入内部 Bean
        • 示例
      • 构造函数方式注入内部 Bean
        • 示例
    • Spring注入集合
      • 示例 1:在集合中设置普通类型的值
      • 示例 2:在集合中设置对象类型的值
    • Spring注入其他类型的属性
      • 注入 Null 值
      • 注入空字符串
      • 注入特殊字符
        • 转义
        • 使用短字符串 `<![CDATA[]]>`
    • Spring Bean作用域
      • singleton
        • 示例 1
      • prototype
        • 示例 2
    • Spring之BeanPostProcessor
      • BeanPostProcessor
      • 自定义后置处理器演示
    • PostConstruct、PreDestroy
      • PostConstruct、PreDestroy:
      • 那么Java提供的@PostConstruct注解,Spring是如何实现的呢?
  • Spring自动装配 基于XML
    • Spring 自动装配
      • 自动装配规则
      • 示例
        • 1.autowire="no" 不使用自动装配
        • 2.byName 按名称自动装配
        • 3.byType 按类型自动装配
        • 4.constructor 构造函数自动装配
          • 5.default 默认的自动装配模式
  • Spring自动装配 基于注解
    • 1. 引入依赖
    • 2. 开启组件扫描
      • 3. 使用注解定义 Bean
      • 4. 基于注解方式实现依赖注入
      • 示例
  • pring 基于注解的配置
    • 基于注解的配置
    • 引入依赖包
    • 配置
    • 实体类
    • 数据访问层
    • 业务层
    • 业务层实现
    • 测试
    • Spring 基于 Java 注入bean
      • 基于 Java 的配置
      • @Configuration 和 @Bean 注解
        • 例子
      • 注入 Bean 的依赖性
        • 例子
    • Spring @Autowired 注解
      • @Autowired 注解的作用到底是什么?
      • @Autowired 注解用法
        • 准备一个Bean
        • Spring扫描配置
        • 应用于构造函数
        • 应用于 setter 方法
        • 应用方法
        • 应用于字段,或者将其与构造函数混合
        • 应用于数组
        • 应用于集合
        • 执行结果
    • Spring @Primary注解
      • @Primary注解
    • Spring @Qualifier 注解
      • Spring @Qualifier 注解
    • JSR和Spring注解、依赖
      • 一、基本概念:
        • 1、java体系
        • 2、JSR
        • 3、JCP
      • 二、JSR规范分类
        • Web Service技术
        • Web应用技术
        • 企业应用技术
        • 管理与安全技术
        • Java SE中与Java EE有关的规范
      • 三、JCP官网查看所有的JSR规范
      • 四、总结
      • 使用JSR250 注释
        • 注解列表
        • 介绍
        • 区别
      • 使用 JSR 330 注释
        • JSR-330 标准注释和Spring的注释
        • @Named注入bean
        • @Inject获取bean
  • Spring读取properties配置文件
    • 准备配置文件
    • 通过配置文件配置
      • 方式一:
      • 方式二:
      • 使用
      • 导入依赖包
      • 测试
    • 通过注解配置
  • Spring 中的监听器事件
    • Spring 中的事件处理
    • 监听上下文事件
  • Spring整合junit
    • 整合Junit5
    • 注解版
    • 配置文件xml版
  • Spring AOP(面向切面编程)
    • Spring 框架的 AOP
    • AOP 术语
    • 通知的类型
    • 实现自定义方面
    • JDK动态代理
      • 示例
    • CGLlB动态代理
      • 示例
      • JDK代理和CGLIB代理的区别
        • JDK动态代理特点
        • CGLIB动态代理特点
        • JDK与CGLIB动态代理的性能比较
        • 原理区别:
    • AspectJ 介绍
      • AspectJ
      • Spring AOP
      • 使用场景说明
      • 对比总结
    • 使用AspectJ进行AOP开发
      • 启用 @AspectJ 注解支持
        • 使用 Java 配置类启用
        • 定义切面 @Aspect
        • 全注解方式定义切面
      • 定义切点 @Pointcut
      • execution 表达式
      • 定义通知
      • 示例
    • 小故事-讲解aop
      • 图解
      • 核酸检测小故事
      • 技术实现
  • Spring事务(Transaction)
    • 事务管理器
      • TransactionDefinition 接口
        • 事务的隔离级别【重点理解】
        • 事务的传播行为【重点理解】
    • TransactionStatus 接口
    • JDBC 事务回滚
      • 一、业务场景
      • 二、准备数据
      • 三、导入依赖包
      • 三、DBUtils
      • 四、下单Dao层代码
      • 五、下单业务
      • 六、测试
    • Spring 事务管理实现
      • 1. 开启注解事务
      • 2. 使用 @Transactional 注解
      • 示例
  • Spring SpEL表达式语言
    • 一、${}
    • 二、${}使用
    • 总结

Spring是什么

​ Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 Spring 自诞生以来备受青睐,一直被广大开发人员作为 Java 企业级应用程序开发的首选。时至今日,Spring 俨然成为了 Java EE 代名词,成为了构建 Java EE 应用的事实标准。

Spring 的诞生与发展

​ 早期的 J2EE(Java EE 平台)推崇以 EJB 为核心的开发方式,但这种开发方式在实际的开发过程中存在种种弊端,例如使用复杂、代码臃肿、代码侵入性强、开发周期长、移植难度大等。 Rod Johnson 在其 2002 年编著的畅销书《Expert One-on-One J2EE Design and Development》中,针对 EJB 各种臃肿的结构进行了逐一的分析和否定,并分别以更加简洁的方式进行了替换。 在这本书中,Rod Johnson 通过一个包含 3 万行代码的附件,展示了如何在不使用 EJB 的情况下构建一个高质量、可扩展的 Java 应用程序。在这个附件中,Rod Johnson 编写了上万行基础结构代码,其中包含了许多可重用的 Java 接口和类,例如 ApplicationC

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

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

相关文章

echarts标注legend的配置

代码&#xff1a; legend: [{top: bottom, //上下位置 top center bottom 还可以用百分比50%等orient: horizontal, // 竖立 vertical horizontal 水平的// right: 0, //靠右 还可以用百分比 50%等// left: 0,// 靠左 还可以用百分比 50%等// 左右位置 否则居中itemWidth: …

前端框架Vue、React、Angular、Svelte对比

在对比 React、Vue.js、Angular 和 Svelte 时&#xff0c;除了在高层次的特性上有显著差异&#xff0c;它们在核心设计理念和底层实现机制上也有明显的不同。为了清晰地理解这些框架&#xff0c;我们可以从以下几个方面来分析它们的核心不同点和底层不同点。 1. 框架类型和设计…

ARM 栈和函数调用

阅读本文前&#xff0c;可以先阅读下述文档&#xff0c;对函数栈、栈帧等的概念会有所了解&#xff0c;会对本文章的理解大有益处 X86_64 栈和函数调用 1、调试环境 Ubuntu&#xff1a; liangjieliangjie-virtual-machine:~/Desktop$ cat /proc/version Linux version 6.5.0…

WebRTC编译后替换libwebrtc.aar时提示找不到libjingle_peerconnection_so.so库

Loading native library: jingle_peerconnection_so 问题原因&#xff1a;编译的时候只编译了armeabi-v7a的版本&#xff0c;但是应用程序是arm64-v8a&#xff0c;所以无法运行 解决方法&#xff1a;更新编译脚本&#xff0c;加上arm64-v8a进行编译 ./tools_webrtc/android/bu…

OpenAI GPT o1技术报告阅读(5)-安全性对齐以及思维链等的综合评估与思考

✨继续阅读报告&#xff1a;使用大模型来学习推理(Reason) 原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 编码 我们训练了一个模型&#xff0c;在2024年国际信息学奥林匹克竞赛&#xff08;IOI&#xff09;中得分213分&#xff0c;排名在第…

Arthas sysenv(查看JVM的环境变量)

文章目录 二、命令列表2.1 jvm相关命令2.1.5 sysenv&#xff08;查看JVM的环境变量&#xff09;举例1&#xff1a;sysenv 查看所有环境变量举例2&#xff1a;sysenv java.version 查看单个属性&#xff0c;支持通过tab补全 二、命令列表 2.1 jvm相关命令 2.1.5 sysenv&#x…

saas收银系统源码

1. 线下门店多样化收银 ①门店有社区小店、也会有大店&#xff0c;甚至还会有夫妻店&#xff0c;同时还要有Windows版和安卓版&#xff0c;需满足不同门店的收银需求。 ②支持Windows收银、安卓收银、无人自助收银、聚合码收银等&#xff0c;支持ai智能称重、收银称重一体机等…

Unity3D入门(二) :Unity3D实现视角的丝滑过渡切换

1. 前言 上篇文章&#xff0c;我们已经初步了解了Unity3D&#xff0c;并新建并运行起来了一个项目&#xff0c;使相机视角自动围绕着立方体旋转。 这篇文章&#xff0c;我们来讲一下Unity3D怎么过渡地切换视角。 我们继续是我上篇文章中的项目&#xff0c;但是需要向把Camera…

Qt Debugging帮助文档

Qt中给断点添加条件&#xff1a; 示例1&#xff1a; 当i10时&#xff0c;程序中断 但不知道为什么&#xff0c;46行的条件没有生效&#xff0c;47行的条件生效了 给断点添加忽略次数&#xff1a; 在程序停止之前忽略该断点200次。 Breakpoints (Debugging with GDB)

AI 时代的网络危机沟通计划

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Go-知识recover

Go-知识recover 1. 介绍2. 工作机制2.1 recover 定义2.2 工作流程2.3 总结 3. 原理3.1 recover函数的真正逻辑3.2 恢复逻辑3.3 生效条件 4. 总结4.1 recover的返回值是什么&#xff1f;4.2 执行recover之后程序将从哪里继续运行&#xff1f;4.3 recover为什么一定要在defer中使…

2024年信息学奥赛CSP-J1入门组初赛真题试卷

2024年信息学奥赛CSP-J1入门组初赛真题试卷 题目总数&#xff1a;20 总分数&#xff1a;100 选择题 第 1 题 单选题 32位int类型的存储范围是&#xff08; &#xff09; A. -2147483647 ~ 2147483647 B. -2147483647 ~ 2147483648 C. -2147483648 ~ 2147483647…

如何使用 React、TypeScript、TailwindCSS 和 Vite 创建 Chrome 插件

创建一个 Chrome 插件是一个有趣的项目&#xff0c;特别是当结合使用强大的工具如 React、TypeScript、TailwindCSS 和 Vite 时 在这篇文章中&#xff0c;我们将逐步引导完成整个过程&#xff0c;了解如何在 2024 年构建自己的 Chrome 插件。无论是经验丰富的开发者还是刚刚起…

C++ | Leetcode C++题解之第423题从英文中重建数字

题目&#xff1a; 题解&#xff1a; class Solution { public:string originalDigits(string s) {unordered_map<char, int> c;for (char ch: s) {c[ch];}vector<int> cnt(10);cnt[0] c[z];cnt[2] c[w];cnt[4] c[u];cnt[6] c[x];cnt[8] c[g];cnt[3] c[h] - …

JavaScript使用leaflet库显示信息窗口

前言 我们可千万不能忘记我们之前花的流程图哦&#xff0c;我们所有的计划都按照我们的流程图来去构建&#xff1b; 我们已经完成了&#xff0c;页面的加载&#xff0c;也已经完成获取用户当前的位置坐标&#xff0c;并且我们通过地图的API将当前的位置在地图中渲染出来&…

【每日刷题】Day128

【每日刷题】Day128 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 606. 根据二叉树创建字符串 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 194. 二叉树的最近公…

TryHackMe 第3天 | Pre Security (中)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识&#xff0c;本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…

【数据结构】排序算法系列——快速排序(附源码+图解)

快速排序 接下来我们将要介绍的是排序中最为重要的算法之一——快速排序。 快速排序&#xff08;英语&#xff1a;Quicksort&#xff09;&#xff0c;又称分区交换排序&#xff08;partition-exchange sort&#xff09;&#xff0c;最早由东尼霍尔提出。快速排序通常明显比其…

XXL-JOB环境搭建

2.快速入门 2.1 下载源码 a.源码下载地址: github地址 gitee地址 2.2.环境搭建&#xff1a; a.初始化调度数据库: 1.请下载项目源码并解压&#xff0c;获取 “调度数据库初始化SQL脚本” 并执行即可 b.编译源码: 1.解压源码,按照maven格式将源码导入IDE, 使用maven进行…

【Python】使用国内镜像安装conda并创建python环境

conda介绍&#xff1a; Conda 是一个开源的包管理系统和环境管理系统&#xff0c;由 Continuum Analytics 开发。它的主要作用是简化科学计算中软件包和依赖的安装和升级&#xff0c;并允许用户轻松地在不同的环境中切换。Conda 的设计初衷是为了简化 Python 环境的搭建和管理&…