Spring笔记【JavaEE】

news/2023/6/6 3:45:25

在这里插入图片描述

Spring 核⼼

Spring 是包含了众多⼯具⽅法的 IoC 容器。

什么是容器

我们之前 接触的容器有哪些?

  • List/Map-> 数据存储容器
  • Tomcat->Web容器

什么是Ioc

IoC = Inversion of Control 翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转”的容

Ioc优点

实现代码的解耦

对象(Bean)生命周期交给Ioc框架来维护,程序员无需关注。

Spring Ioc容器最核心的功能

  1. 将Bean(对象)储到Spring容器中
  2. 将Bean(对象)从Spring容器中出来

DI

DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”的意思。

Ioc和DI有什么区别?

  • Ioc是一种思想
  • DI是一种实现

等同于 乐观锁【思想】 CAS【实现手段】

Spring创建与使用

1.创建Spring项目

  • Maven项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVndXQPj-1674091664403)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669636523133.png)]

  • 添加spring框架支持

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhrJBtas-1674091664405)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669636546163.png)]

  • 创建一个启动类并添加 main

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZhnMwr0O-1674091664405)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669636578338.png)]

2.将对象存储到Spring中

  • 如果是第一次添加,先在spring项目中添加配置文件,非第一次此步骤省略

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i4uJe1NF-1674091664406)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669636610690.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EQYLnKc-1674091664406)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669636831764.png)]

  • 先创建一个bean对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kur53r7A-1674091664407)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669637065873.png)]

  • 在配置文件中将需要保持到Spring中的bean对象进行注册

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OD9OZoLB-1674091664408)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669637256032.png)]

3.从Spring中取出对象【读取】

  • 先得到Spring上下文对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zFrr6k5N-1674091664409)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669637666419.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uEuoC2LJ-1674091664410)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669637679061.png)]
保持一致

  • 再通过上下文对象提供的方法获取咱们自己需要使用的bean对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOIe4ZQ7-1674091664410)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669637756061.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a15JYxcW-1674091664411)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669637785829.png)]
在这里插入图片描述
在这里插入图片描述

  • 使用bean对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lBHjfQGv-1674091664411)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669637874628.png)]

ApplicationContext VS BeanFactory

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sG2cHY10-1674091664412)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669638268398.png)]

经典面试:ApplicationContext 和 BeanFactory 有什么区别?

  • 相同点:都可以实现从容器中获取bean,都提供了getBean的方法。
  • 不同点:
    • ApplicationContext 属于 BeanFactory 的子类。BeanFactory 只提供了基础访问Bean的方法,而ApplicationContext 除了拥有BeanFactory 的所有功能之外,还提供了更多的方法实现,比如对国际化的支持、资源访问的支持、以及事件和传播等方面的支持。
    • 从性能方面来说二者是不一样的,BeanFactory 是按需加载Bean,ApplicationContext 是饿汉式,在创建时会将所有的Bean都加载起来,以备以后使用。

> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cc3bZQT8-1674091664412)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669639060378.png)]
在这里插入图片描述

获取Bean的方法

  1. 使用bean name 获取 bean[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cni9CyPw-1674091664413)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669639773232.png)]

  2. 根据 bean type 获取 bean[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqOfg4NF-1674091664413)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669639844897.png)]

写法简单,但是容易出问题。当同一个类型被注入到spring中多次的时候,就会报错。
3. 根据 bean name 和类型获取 bean [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hEKKXrkt-1674091664414)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669639872897.png)]
健壮性好,推荐使用!

Spring更简单的读取和存储对象

注解

1.存储bean对象

2.读取bean对象(对象装配)

  • 属性注入

  • 构造方法注入【推荐】

  • Setter注入

注⼊的关键字有:
@Autowired

@Resource

  • @Autowired 和 @Resource 区别:
    • 出身不同;
    • 使⽤时设置参数不同 @Resource ⽀持更多的参数,⽐如 name。
  • 解决同⼀类型多个 Bean 的报错:
    a. 使⽤ @Resource(name=“”)
    b. 使⽤ @Qualifier(“”)

三种注⼊优缺点分析

  • 属性注⼊的优点是简洁,使⽤⽅便;缺点是只能⽤于 IoC 容器,如果是⾮ IoC 容器不可⽤,并且只有在使⽤的时候才会出现 NPE(空指针异常)。
  • 构造⽅法注⼊是 Spring 推荐的注⼊⽅式,它的缺点是如果有多个注⼊会显得⽐较臃肿,但出现这种情况你应该考虑⼀下当前类是否符合程序的单⼀职责的设计模式了,它的优点是通⽤性,在使⽤之前⼀定能把保证注⼊的类不为空。
  • Setter ⽅式是 Spring 前期版本推荐的注⼊⽅式,但通⽤性不如构造⽅法,所有 Spring 现版本已经推荐使⽤构造⽅法注⼊的⽅式来进⾏类注⼊了 。

Bean的6种作用域

Bean的作用域:bean在spring整个框架中的某种行为(单例模式)。

  1. singleton:单例作⽤域(默认)
  2. prototype:原型作⽤域(多例模式) -每次对该作⽤域下的Bean的请求都会创建新的实例
  3. request:请求作⽤域(Spring MVC)-每次http请求会创建新的Bean实例
  4. session:会话作⽤域(Spring MVC)-在⼀个http session中,定义⼀个Bean实例
  5. application:全局作⽤域(Spring MVC)-在⼀个http servlet Context中,定义⼀个Bean实例
  6. websocket:HTTP WebSocket 作⽤域 (Spring WebSocket)

单例作用域(singleton) VS 全局作用域(application)

  • singleton是Spring Core 的作用域;application是Spring Web中的作用域
  • singleton作用与Ioc容器,而application作用于Servlet容器

设置Bean的作用域

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-McfSKNRH-1674091664417)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669692991606.png)]

Bean的生命周期

  1. 实例化Bean(给Bean分配内存空间)
  2. 设置属性(对象注入)
  3. Bean初始化
    • 执行各种通知(执行各种Aware)
    • 执行初始化的前置方法
    • 执行构造方法,两种执行方式,一种是执行 @PostConstruct,另一种是执行 init-method
  4. 使用Bean
  5. 销毁Bean
    • @PreDestroy
    • 重写DisposableBean 接⼝⽅法
    • destroy-method

为什么要先设置属性在进⾏初始化呢 ?

  • 在初始化前如果没有设置属性的话,那么就可能会造成空指针。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

如何设置构造柱植筋/预留筋/预埋件做法?

解决方案: 工程设置--计算设置--砌体填充墙构造柱做法,在里面选择的时候,选择植筋就可以了,如图

AC695X_FCCBQB认证资料获取[杰理全系列]

百度网盘: 链接:https://pan.baidu.com/s/1-_qCYw_mQaX63pBYNCumvw 提取码:j6vs 里面有最新BQB证书,和FCC BQB下载软件:都是批处理的。 注意的是:原厂网盘下载出来的软件,过认证的时候要看客户…

初识 jQuery(JavaScript 框架)

初识 jQuery(JavaScript 框架)参考描述jQuery使用 jQuery 的开发优势(部分)获取jQuery 语法基础语法入口函数$()jQuery 与 $参数DOM 与 jQuery模板获取DOM 对象jQuery 对象转换DOM 对象转换为 jQuery 对象$()jQuery 对象转换为 DO…

以element ui为例分析前端各种弹窗和对话框的使用场景与区别

文章目录摘要Dialog 对话框Drawer 抽屉Notice 通知MessageBox 弹框Popconfirm 气泡确认框Message 消息提示Notification 通知Dialog 对话框与Drawer 抽屉的区别MessageBox和Dialog的区别Message消息提示与Notification通知的区别摘要 本文研究分析element ui 中的各种弹窗和对…

Linux网络编程应用:教你如何从阿里云获取天气数据、快递物流数据(HTTP协议、C语言)

一、获取天气数据 准备工作 一、点击阿里云链接阿里云,搜索易源天气,找到下方的购买调试入口:(其他天气也可以,请求参数可能有不同) 2、登录后点击购买,新用户不用花钱,但是只能访…

查询快递中,快递公司数据信息的问题

我将快递公司的相关信息,直接放在了res/raw/companyinfos.json,文件里面,然后在应用启动的时候先创建数据库,然后在选择快递公司画面的时候就读取信息。目前信息不多,但是如果信息再增加的话,会出现进入选择…

【SpringCloud15】SpringCloud Stream消息驱动

1.消息驱动概述 1.1 为什么要引入消息驱动 1.2 是什么 概述:屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型 官网 Spring Cloud Stream是用于构建与共享消息传递系统连接的高度可伸缩的事件驱动微服务框架,该框架提…

vue 使用 jszip file-saver 对附件word pdf png 等进行zip打包下载

vue jszip file-saver 实现一个勾选,批量前端下载文件,多个的话进行下载zip文件下载功能,如下图所示 1. 安装依赖 npm install jszip npm install file-saver2. 在utils文件下新建downloadZip.js 封装下载zip包方法 downloadZip.js 文件代…