Spring 5 笔记 - 入门与IOC

news2024/11/24 8:29:37

1. Spring 入门简介

Spring:轻量级、开源的JavaEE框架, 解决企业应用的复杂性。包括IOC和AOP两个核心部分。

IOC: 控制反转,把创建对象和对象之间的调用的过程都交给Spring 进行管理,使耦合度降低。

AOP:面向切面,不修改源代码进行功能增强。

Spring特点:1. 解耦; 2. AOP编程支持; 3.方便测试(Junit); 4.方便整合; 5.方便事务操作; 6.降低API开发难道。

选取Spring版本5.X

相关包下载:

进入Spring官网:Spring | Home

获得下载地址:https://repo.spring.io/artifactory/release/org/springframework/spring/

下载完后解压:

2. IOC实例

1.建Java项目

  1. 引入Jar包, 新建lib文件夹,copy相关包:

引入如下基础包:

common-logging-xxx.jar 包下载地址:

Apache Commons Logging - Download Apache Commons Logging

  1. 把上面的Jar包导入到项目中。

点击“File --> Project Structure”, 然后:

点“+”号,选 "Attach Files or Directories", 导入上面的5个Jar包:

4.创建普通类

5.创建Spring配置文件

  1. 测试代码

实例完成。

3. IOC 原理

3.1 IOC 底层原理:xml解析、工厂模式、反射。

xml解析:读取配置文件

IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。Spring 提供IOC容器实现的两种方式(两个接口):

(1) BeanFactory: IOC容器的基本实现,是Spring内部使用的接口,不提供开发人员进行使用

特点:加载配置文件时不会创建对象,在获取对象或者使用对象的时候才创建对象

BeanFactory实现类:在“BeanFactory” 上 “Ctrl + H”打开:

(2) ApplicationContextBeanFactory接口的子接口,提供更多强大的功能,一般由开发人员使用

特点:加载配置文件的时候就把配置文件中的对象进行创建。(有些对象可以运用于服务器启动时创建,加快运用是的速度)

ApplicationContext的实现类:在 “ApplicationContext”上“Ctrl + H”打开:

4. IOC 操作(Bean管理, 基于xml)

4.1 IOC操作(创建对象,注入属性)

(1)创建对象

(2)注入属性

Bean管理操作有两种方式:

(1)基于xml配置文件方式实现

(2)基于注解方式实现

基于xml创建对象

  • 创建对象时候,默认是执行无参构造方法完成对象创建。

基于xml注入属性

(1)DI:依赖注入,就是注入属性

第一种方式,使用set方法注入。

第二种方式,有参构造方式注入。

P名称空间注入,简化xml属性注入(实践中用得少):

发现识别不了p命名空间得URL,如下:

可以参考: IntellijIdea解决xml文件中出现“uri is not registered”_sfhappy23的博客-CSDN博客

此问题尚未解决。。。

4.2 IOC操作(注入其它类型的属性)

4.2.1 字面量

(1)null值

(2)属性中包含特殊符号

方法一:把特殊字符进行转义

方法二:如下:

4.2.2 注入属性-外部bean

4.2.3 注入属性-内部bean

4.2.4 注入属性-级联赋值

(1)第一种实现方式

其它同上面外部bean一样,就配置文件不同:

(2)第二种实现方式

记得要加入如下的get方法才可以用这个种级联赋值:

4.3 IOC操作(xml注入集合属性)

  1. 注入数组类型属性
  2. 注入List集合类型属性
  3. 注入Map集合类型属性
  4. 注入Set集合类型属性

实例:

  1. 在集合里面注入对象类型值

  1. 把集合注入部分提取出来

(1)在Spring配置文件中引入名称空间,和配置bean

(2)其它文件同上面的例子,执行结果:

4.4 IOC操作(Bean管理:FactoryBean)

  1. Spring 有两种类型的Bean,一种是普通Bean,一种是工厂Bean(FactoryBean)
  2. 普通Bean:在配置文件中定义的Bean类型就是返回类型
  3. 工厂Bean:在配置文件中定义的Bean类型可以和返回的类型不一样。

工厂Bean例子:

(1)第一步,创建类,让这个类作为工厂Bean,实现接口FactoryBean

(2)第二步,实现接口里面的方法,在实现的方法中定义返回的bean类型

4.5 IOC操作(Bean作用域)

在Spring里面,可以设置创建bean实例时单实例还是多实例

(1)在Spring 里, 默认情况下bean是单实例对象。

(2)设置多实例:在Spring 的配置文件bean标签里面有属性(scope)用于设置单实例还是多实例。

scope属性值:

  1. singleton, 默认值,表示单实例对象,在加载Spring配置文件时候就会创建单实例对象。
  2. prototype,表示多实例对象,不是在加载Spring配置文件时候创建对象,在调用getBean方法时候创建多实例对象。
  3. request,表示一次请求, 每次请求时创建对象。
  4. session,表示一次会话, 每次会话时创建对象。

例子(同上,差别如下):

4.6 IOC操作(Bean生命周期)

Bean生命周期:对象从创建到销毁的过程:

(1)通过构造器创建bean实例(无参构造器)

(2)为bean的属性设置值和对其它bean引用(调用set方法)

(3)调用bean的初始化的方法(需要进行配置初始化的方法)

(4)bean可以使用了(对象获取到了)

(5)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

例子:

加上Bean的后置处理器后,bean的生命周期一共有7步:

(1)通过构造器创建bean实例(无参构造器)

(2)为bean的属性设置值和对其它bean引用(调用set方法)

(3)把bean的实例传递给bean的前后置处理器的方法(postProcessBeforeInitialization方法

(4)调用bean的初始化的方法(需要进行配置初始化的方法)

(5)把bean的实例传递给bean的后后置处理器的方法(postProcessAfterInitialization方法

(6)bean可以使用了(对象获取到了)

(7)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

例子(创建类,实现接口BeanPostProcessor,创建后置处理器):

同上面的例子,变动如下:

4.7 IOC操作(xml自动装配,实际中用得不多。)

(1)概念:根据指定装配规则(属性名称或者属性类型),Spring自动将匹配地属性值进行注入。

(2)实现自动装配:在bean标签中加入属性autowire配置自动装配,autowire属性常用两个值:

  1. byName:根据属性名称注入,注入值bean的id值和类属性名称一样。
  2. byType:根据属性类型注入, 如果有两个同类型的bean,那么注入会报错

属性名称注入例子:

属性类型注入例子

其它文件一样,不同的如下:

4.8 IOC操作 (外部属性文件)

例子:

下载德鲁伊连接池的jar包

Druid(德鲁伊) 数据库连接池,是阿里巴巴开源的数据库连接池项目。下载地址:

Central Repository: com/alibaba/druid

(2)引入德鲁伊Jar包到项目

(3)配置properties属性文件

(4)引入外部属性文件配置德鲁伊数据库连接池(需要引入名称空间context)

5. IOC 操作 (Bean管理,基于注解)

IOC操作Bean管理(基于注解方式)

(1)格式:@注解名称(属性名称=属性值,属性名称=属性值)

(2)注解作用在类上面、方法上面和属性上面

(3)使用注解可以简化xml配置

(4)Spring针对Bean管理中创建对象提供的注解:

  1. @Component, 普通的组件上
  2. @Service, 一般用在业务层上
  3. @Controller, 一般用在Web层上
  4. @Repository,一般用在DO层上
  • 上面的四个注解功能是一样的,都可以用来创建Bean实例,只是方便用于区分用到不同的地方。

5.1 基于注解方式实现对象创建

(1)引入aop依赖

(2)开启组件扫描(需要引入名称空间context)

(3)创建类,在类上面添加创建对象的注解

5.2 开启组件扫描细节配置

  1. 示例1:

use-default-filters 的默认值是"true",表示默认情况下会扫描

  1. 示例2:

5.3 基于注解方式实现属性注入

(1)@AutoWired, 根据属性类型进行自动装配

存在弊端: 如果存在多个同类型的实现类,无法确定注入哪个, 会报错.

例子:

(2)@Qualifier,根据属性名称进行注入

@Qualifier注解要和上面的@AutoWired一起使用。

解决弊端: 结合@AutoWired使用, 可以明确哪个实现类.

示例:

其它同上,不同部分如下:

(3)@Resource, 可以根据类型注入,也可以根据名称注入

@Resource注解不是Spring中的, 而是javax中的对象.

示例:其它同上,不同如下

  1. 根据类型进行注入

  1. 根据名称进行注入

(4)@Value,注入普通类型属性

示例,其它同上,不同如下

5.4 完全注解开发(用配置类代替xml配置文件)

例子:其它同上,不同如下

(1)创建配置类,替代xml配置文件,删除了原来的xml配置文件

(2)编写测试类

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

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

相关文章

Winform从入门到精通(38)—StatusStrip(史上最全)更新中

一、属性 1、Name 获取StatusStrip控件对象 2、AllowDrop 允许用户拖拽数据到控件上 3、AllowItemReorder 当用于按下alt键时,是否允许对项进行排列,如下图: 4、AllowMerge 5、Anchor 6、AutoSize 7、BackColor 设置StatusStrip的背景色 8、BackgroundImage 设置背…

R语言方差分析

R中的方差分析 介绍用于比较独立组的不同类型的方差分析,包括: 单因素方差分析:独立样本 t 检验的扩展,用于在存在两个以上组的情况下比较均值。这是方差分析检验的最简单情况,其中数据仅根据一个分组变量&#xff0…

垃圾回收器ZGC应用分析总结

目录 一、基本概述 二、基本关键技术知识总结 (一)三色标记法(着色指针) (二)读屏障 (三)多图映射 (四)简单场景说明ZGC并发 三、基本回收原理介绍 四…

PowerJob基本概念

本文来说下PowerJob的一些基本概念 文章目录 PowerJob概述PowerJob官网为什么选择PowerJob同类产品对比适用场景 PowerJob概述 PowerJob是新一代分布式任务调度与计算框架,支持CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系…

React框架第七课 语法基础课《第一课React你好世界》

React框架第七课 语法基础课《第一课React你好世界》 从这一课开始真正进入到React框架的基础语法学习,之前的前五课做个了解即可。 1 React框架的基本项目结构 ├── README.md 使用方法的文档 ├── node_modules 所有的依赖安装的目录 ├── package-lock.j…

[架构之路-181]-《软考-系统分析师》-19- 系统可靠性分析与设计 - 2-容错性: 软件容错技术

目录 前言: 1 9 . 4 软件容错技术 19.4.1 N 版本程序设计 1 . 与 通 常 软 件 开 发 过 程 的 区 别 2 . 其 他 需 要 注 意 的 问 题 19.4.2 恢复块方法 19.4.3 防卫式程序设计(预防性设计)》广泛使用 1 . 错误检测 2 . 破坏估计 …

【C++初阶】类与对象:6个默认成员函数-----构造函数和析构函数

我们在写代码的时候经常会忘记初始化和销毁,C的构造函数和析构函数就能避免这个问题。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 一.构造函数 A.概念 1.构造函数是一个特殊的成员函数; 2.名字与…

React框架的第八课 语法基础课《第二课React框架中的事件》

React框架的第八课 语法基础课《第二课React框架中的事件》 React中的事件是指通过React建立的应用程序中处理用户交互的响应。React事件处理程序只是在组件上调用的JavaScript函数,以响应某些类型的操作或事件,例如点击、触摸、滚动等。 React组件可以使…

【P3】HTTP 接口设计

一、简答 HTTP 接口设计 HTTP请求默认值: 配置 http 请求的默认值,比如协议、主机、端口 HTTP信息头管理器: 配置 http 请求的头部参数 HTTP请求: 用于和业务交互 查看结果树: 用于结果展示 二、准备工作 慕慕生…

希尔排序详解(Shell Sort)

本文已收录于专栏 《算法合集》 一、简单释义 1、算法概念 希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐…

【复杂网络建模】——Pytmnet进行多层网络分析与可视化

目录 一、Pymnet介绍 二、安装步骤 三、多层网络的构建 1、单层网络的构建 2、双层随机网络的构建和可视化 3、多路复用网络图的可视化 四、总结 一、Pymnet介绍 官网: Pymnet是一个用于网络分析和建模的Python库。它提供了各种网络分析工具,例…

shell的基础学习一

文章目录 一、shell的简介二、 Shell 变量三、Shell 传递参数总结 一、shell的简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供…

百胜中国:未来将实现强劲增长

来源:猛兽财经 作者:猛兽财经 收入分析与未来展望 在过去的三年里,百胜中国(YUMC)的收入一直受到疫情导致的旅行限制和封锁的影响。为了应对疫情造成的业务中断,该公司开始专注于外卖业务,并将…

中通快递财报预测:中通快递2023年收入和利润将大幅下降

来源:猛兽财经 作者:猛兽财经 市场对中通快递2023年的预测 卖方虽然预测中通快递(ZTO)在2023年的表现会很不错,但他们也预计中通快递今年的财务业绩将不会像去年那样好。 根据S&P Capital IQ的数据,卖…

【软考备战·希赛网每日一练】2023年5月1日

文章目录 一、今日成绩二、错题总结第一题第二题 三、知识查缺 题目及解析来源:2023年05月01日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 了解即可。 第二题 解析: 在序列基本有序时,快速排序基准元素起不到分…

第16章 变更管理

文章目录 16.1.2 项目变更的分类 50416.1.3 项目变更产生的原因 50516.2 变更管理的基本原则 50516.3 变更管理角色职责与工作程序 50616.3.1 角色职责 50716.3.2 工作程序 50716.4.1 变更管理操作要点 511 16.1 项目变更的基本概念 504 项目变更是指在信息系统项目的实施过程中…

【蓝桥杯】Python基础:经济基础决定上层建筑!

前言:今年4月第一次参加蓝桥杯比赛,选择的Python 研究生组赛道。在备赛过程中,发现经常会用到一些编程小技巧,因此笔者整理了一些蓝桥杯Python组编程基础常用的内容,以便日后备用。如果有小伙伴也觉得实用,…

1 对数器,二分查找,

文章目录 对数器二分查找**1. 有序序列二分查找****2. 在一个有序数组中&#xff0c;找<某个数最右侧的位置****3. 在一个有序数组中&#xff0c;找>某个数最左侧的位置****4. 无序序列二分查找 &#xff0c;求局部最小值** 对数器 对数器用于在自己的本地平台验证算法正…

百度、谷歌等搜索引擎高效搜索方法 —— 更快速搜索到你想要内容

一、常用搜索方法 1、限定标题 intitle 又被称为去广告搜索法&#xff0c;intitle命令&#xff0c;即in title&#xff08;在标题里&#xff09;返回的的结果是网页的标题包含该关键词。一般情况下搜索的关键词都会在标题里出现&#xff0c;使用intitle命令一般是在特殊需求下…

极乐迪斯科(风格) | Disco Elysium – Style LoRA

目录 What is this ❓How to use / 使用方法 &#x1f4dd;其他信息与参数: 模型演示&#xff08;多图预警&#xff09; 正面tag 负面tag What is this LoRA版本的极乐迪斯科风格模型, 使用共计15张图片, 分辨率为1024*1024, 用Anything v4.5训练. 其他模型没有经过测试,…