Spring 复习笔记

news2024/12/25 0:15:26

目录

  • 第一步存 Bean
    • 第二步获取并使用 Bean
      • 依赖查找的方式
      • ApplicationContext vs BeanFactory
    • 更简单的存储 Bean
      • 1. 配合五大类注解使用
      • 2. 方法上添加注解 @Bean
    • 更简单的获取 Bean

Spring IoC 容器管理的资源就是对象,这个对象也叫做 Bean。Spring 作为一个 IoC 容器,最基础的功能就是将对象存储到容器里以及从容器中拿对象。
在这里插入图片描述
DI 依赖注入,就在程序运行期间,动态的将依赖对象获取到的过程就是依赖注入。

IoC 与 DI:描述的都是同一件事,就是我们当前程序的运行需要另一个对象的时候我们不需要在手动创建这个对象,而是从框架中直接获取,然后注入到当前程序。 其实本质就是对象的这个生命周期交给框架来控制而不是当前程序或者说开发者的代码。区别就是IoC是一种设计思想,而 DI 就是这个思想的一种具体实现方式。




第一步存 Bean

在这里插入图片描述

此时 UserService 这个对象就已经存储到 容器中了。

第二步获取并使用 Bean

依赖查找的方式

在这里插入图片描述
在这里插入图片描述

ApplicationContext vs BeanFactory

  1. ApplicationContext 是 BeanFactory 的一个子类(间接子类),ApplicationContext 拥有更多的功能
  2. 加载 Bean 的机制不同:
    BeanFactory 是懒加载,按需加载,也就是使用一个 Bean,加载一个 Bean
    ApplicationContext 一次性加载所有的 Bean 对象

更简单的存储 Bean

在这里插入图片描述

1. 配合五大类注解使用

2. 方法上添加注解 @Bean

注意,@Bean 必须配合五大类注解一起使用。
在这里插入图片描述
名字默认是 方法名,不是要获取的对象名。
@Bean 可以重命名:name 和 value 都可以修改名称,支持多个名称。需要注意的是,重命名之后,使用方法名就不能获取到对象了。

更简单的获取 Bean

对象装配有 3 种方式

  1. 属性注入
    @Autowired 注解即可

在这里插入图片描述
属性注入的对象如果在框架中存了多个,就会报这个错,解决方案:

  • 将对象名字修改成 存的时候对应的某一个名字
  • 在这里插入图片描述
    使用注解 @Qualifier
    优点:用起来简单
    缺点:
  • 无法注入 final 修饰的对象
    在这里插入图片描述
    此时有两种方法解决,一种是直接 new 一个对象,另一种是在 构造方法里 new。
  • 只适用于 IoC 容器
  • 更容易违背单一设计原则,因为使用起来比较简单
  1. 构造方法注入
    Spring 4.x 推荐的方式
    在这里插入图片描述
    @Autowired 按道理来讲应该是要加的,但是构造方法注入可以不加,或者说不加也行,当然不加的话有一个前提就是只有一个构造方法。
    优点:
  • 可以注入不可变对象
  • 注入的对象不会被修改,因为构造方法只会加载一次
  • 注入的对象会被完全初始化
  • 通用性更好
    缺点:官方没有提。
  • 麻烦
  • 不能解决循环依赖问题
  1. Setter 注入
    在这里插入图片描述
    优点:通常 set 只 set 一个属性,所以 setter 更符合单一设计原则
    缺点:
  • 无法注入一个 final 修饰的属性
  • setter 注入的对象可以被修改

还有一点补充就是这里的 @Autowired 可以替换成 @Resource 注解,效果是一样的,除了 构造方法不支持@Resource。
这两个注解的区别:

  • @Autowired 是 Spring 的, @Resource 是 jdk 的
  • 由于 Spring 框架执行在 java 之后,所以有的情境下使用 @Autowired 会报错(误报,用还是能用的),类似于后到教室不知道前面老师讲了什么一样。
  • 相比于 @Autowired 来说,@Resourse 支持更多的参数设置(比如可以通过设置 name 解决相同 Bean 注入问题)
  • @Resource 不支持 构造方法注入

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

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

相关文章

VTable: 不只是高性能的多维数据分析表格

VTable,面向多维分析与可视化的高性能表格组件 导读 VTable: 不只是高性能的多维数据分析表格,更是行列间创作的方格艺术家! VTable是字节跳动开源可视化解决方案 VisActor 的组件之一。 在现代应用程序中,表格组件是不可或缺的…

面试金典--面试题 17.21. 直方图的水量(不困难的困难题)

文章目录 题目描述思路分析完整代码 题目描述 给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接…

适用于医美行业的微信管理系统

在当今这个数字化时代,微信已经成为人们日常生活中必不可少的社交工具之一。对于医美行业来说,微信也是一个极为重要的营销渠道。 医美行业面临的一些困境 ①门槛低,竞争大,需要进行大量营销,来走出红海 ②医美种类繁…

第三章 栈、队列和数组

第三章 栈、队列、数组 栈栈的基本概念栈的顺序实现栈的链接实现栈的简单应用和递归 队列队列的基本概念队列的顺序实现队列的链接实现 数组数组的逻辑结构和基本运算数组的存储结构矩阵的压缩存储 小试牛刀 栈和队列可以看作是特殊的线性表,是运算受限的线性表 栈 …

Nmap扫描教程-01

Nmap扫描教程 SYN扫描操作及原理(半连接扫描) 1. 第一步打开wireshark选着你要监听网卡 2. 在kail中输入命令找到我们需要扫描主机的ip地址 arp-scan -l -I eth1 3. 在kail中输入命令进行SYN半连接扫描 nmap -sS -p80 --reason -vvv 172.30.1.128 -s…

这是要被奖金给砸晕啊......

嗨咯,大家好,我是K同学啊! 由于最近训练营中经常有同学问我,有哪些比较好的知识变现且可以提升自己专业水平的渠道,这几天整理出了一个个人认为还不错的关于深度学习方面的大赛(就奖金比较多而已&#xff…

服务器启用SGX(以PowerEdge R750为例)

一、检查处理器是否支持SGX 在shell中输入以下命令查看CPU型号 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c在Product Specifications中找到对应的处理器参数信息,如果支持SGX,可以在Security & Reliability中看到如下信息 二、以“软…

【centos7安装ElasticSearch】

概述 最近工作中有用到ES ,当然少不了自己装一个服务器捣鼓。本文的ElasticSearch 的版本: 7.17.3 一、下载 ElasticSearch 点此下载 下载完成后上传至 Linux 服务器,本文演示放在: /root/ 下,进行解压&#xff1…

R实现地图相关图形绘制

大家好,我是带我去滑雪! 地图相关图形绘制具有许多优点,这些优点使其在各种领域和应用中非常有用。例如:地图相关图形提供了一种直观的方式来可视化数据,使数据更容易理解和分析。通过地图,可以看到数据的空…

来单提醒/客户催单 ----苍穹外卖day9

来单提醒 需求分析 代码开发 注意:前端请求的并不是8080端口;而是先请求Nginx,Nginx进行反向代理以后转发到8080端口 这段代码首先创建了一个orders类用于更新订单状态 并且在更新状态后使用websocket发送给后端提醒 将信息放在map后,使用json的string化方式传给一个接收对象,…

使用wireshark解密ipsec ISAKMP包

Ipsec首先要通过ikev2协议来协商自己后续协商所用的加解密key以及用户数据的esp包用的加解密包。 ISAKMP就是加密过的ike-v2的加密包,有时候我们需要解密这个包来查看协商数据。如何来解密这样的包? 首先导出strongswan协商生成的各种key. 要能导出这些key&#…

“元创新·智生成” 第15届企业数智化学习大会公布嘉宾阵容

2023年是AIGC爆发年,与AI相关的创新应用迅速向各行各业渗透。 在企业培训领域,数字人、元宇宙等正逐渐成为企业在开展人才发展、业务培训等工作的工具,其高效、便捷、在线化、场景化等优势受到企业的热捧。在需求的推动下,企业培…

超实用的微信机器人功能:自动通过好友,自动打招呼,自动回复!!

无需下载软件 多号聚合 高效管理 1 自动通过好友 有新的好友请求时,系统会快速自动通过好友,免得错过客户。 同时能够多个微信设置,以及设置自动通过的时间段,只要还没通过就会等到我们设置的时间段里自动通过 2 自动打招呼 …

图片大小转换(对于图片进行压缩)

传入的是图片途径 import java.io.*; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.util.Base64;// 限制图像大小为4MB public byte[] limitImageSize(File imageFile, int maxSizeInBytes) throws IOException {if (imageFile.length() …

演唱会远景拍摄不清晰,一招秒变神图!

演唱会现场拍摄的照片不清晰,画质很模糊,遇到这种情况的图片,我们可以利用图片处理工具修复清晰。 我们用像素低的手机拍照或者拍摄的物体太远时,往往会拍出很模糊的照片,但是你又没办法再捕捉到刚才那精彩的一幕&…

Maven 依赖管理

Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。 可传递性依赖发现 …

掌握这3点,企业就能规避收款业务中的合规风险

随着国家政策监管日趋严格,企业合规管理正在受到高度关注。在企业收业务款场景中,银行回单管理容易被忽略,若处理不当,将面临合规风险。具体表现如下: 审计依据不充分 银行回单是企业内部控制和合规管理的重要组成部…

idea新建一个module时,文件夹显示灰色/pom.xml文件显示灰色且中间有条横线

1.问题 2.解决方法 File->Settings->Ignored Files->找到勾选的pom.xml文件,取消勾选,点击ok即可。 3.已解决

使用 Databend Kafka Connect 构建实时数据同步

作者:韩山杰 Databend Cloud 研发工程师 hantmac (Jeremy) GitHub Kafka Connect 介绍 Kafka Connect 是一个用于在 Apache Kafka 和其他数据系统之间可扩展且可靠地流式传输数据的工具。通过将数据移入和移出 Kafka 进行标准化,使得快速定义连接器以在…

VBA技术资料MF68:更改所选区域边框颜色

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…