Spring 复习笔记

目录

  • 第一步存 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.rhkb.cn/news/154510.html

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

相关文章

zabbix自定义监控内容和自动发现

6 目录 一、自定义监控内容: 1.明确需要执行的 linux 命令 2.创建 zabbix 的监控项配置文件,用于自定义 key: 3. 在 Web 页面创建自定义监控项模板: 3.1 创建模板: 3.2 创建监控项: 3.3 创建触发器&#…

VxeTable 表格组件推荐

VxeTable 表格组件推荐 https://vxetable.cn 在前端开发中,表格组件是不可或缺的一部分,它们用于展示和管理数据,为用户提供了重要的数据交互功能。VxeTable 是一个优秀的 Vue 表格组件,它提供了丰富的功能和灵活的配置选项&…

关于优先队列的一点细节

在使用优先队列PriorityQueue时,默认的是升序排列,自己可以指定比较器改为降序排列,例如Collections.reverseOrder()等。 但是在我做力扣的过程中,简单的用一个list的addAll方法添加了优先队列里边所有元素,结果发现添…

【Spring】Spring MVC 程序开发

Spring MVC 程序开发 一. 什么是 Spring MVC1. MVC2. Spring、Spring Boot 与 Spring MVC 二. 创建 Spring MVC 项目1. 创建项目2. 用户和程序的映射3. 获取用户请求参数①. 获取单个参数②. 获取多个参数③. 传递对象④. 后端参数重命名(后端参数映射)R…

Django开发之进阶篇

Django进阶篇 一、Django学习之模板二、Django学习之中间件默认中间件自定义中间件 三、Django学习之ORM定义模型类生成数据库表操作数据库添加查询修改删除 一、Django学习之模板 在 Django 中,模板(Template)是用于生成动态 HTML&#xff…

vue-6

一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话,需要给当前跳转的导航加样式,同时要移除上一个a标签的样式,太麻烦!!! 2.解决方案 vue-router 提供了一个全局组件 router…

【PickerView案例13-应用程序对象介绍 Objective-C语言】

一、应用程序对象介绍: 1.应用程序对象介绍: 应用程序介绍: 应用程序介绍: 应用程序介绍: 应用程序启动,本身这一过程,不是应用程序启动就完事儿了, 它有一些比较细节的东西,比如说: 1)info.plist以及pch文件 2)UIApplication对象 这个呢,我们都是分开的去说,…

北斗高精度定位为无人车成为机场运营新常态提供技术保障

在现代快节奏的生活中,人们对交通效率和安全性的需求越来越高。为了满足这一需求,无人驾驶技术被广泛研究和应用。而随着北斗卫星系统的发展,机场无人车正成为潜在的未来运输解决方案。本文将深入探讨北斗卫星如何改变机场运营,以…

一站式数据可视化与分析平台JVS智能BI强大的数据节点功能

在商业智能(BI)中,数据集是数据的集合,用于分析和报告。数据节点是数据集中的一个重要组成部分,它代表数据集中的一个特定数据点或数据元素。通过使用数据节点,可以对数据进行过滤、分组和计算,…

2785323-77-3,MAL-Alkyne,双功能连接试剂Alkyne maleimide

炔烃马来酰亚胺,Alkyne maleimide,MAL-Alkyne是一种非常有用的双功能连接试剂,可以在生物分子中发挥重要的作用。它的马来酰亚胺基团可以与生物分子中的硫醇基团反应,形成共价键,从而将生物分子与炔烃连接起来。这种连接方式在生物…

将 Ordinals 与比特币智能合约集成:第 3 部分

基于 Ordinals 的 BSV-20 同质化代币 之前,我们展示了如何将比特币智能合约与 Ordinals 集成,Ordinals 可以被视为链上的 NFT。 在本文中,我们将展示如何将它们与同质化代币(即 BSV-20 代币)集成。 我们仍然以拍卖为例…

【数据库——MySQL(实战项目1)】(2)图书借阅系统

目录 1. 简述2. 功能代码2.1 创建视图显示所有逾期未归还的借阅信息(包括借阅人姓名,借阅人类别,书名,借出日期,应归还日期,逾期时长);2.2 创建存储过程,每借出一本图书&…

【算法笔记】LCR 086. 分割回文串

基本思想是使用回溯法,回溯法都可以将问题划分为一个解空间树:假设字符串s为"aab",那么我们可以使用深度优先搜索去构建解空间树: dfs遍历出来的第一个序列是[a, a, b],显然该序列都是回文子串,…

前后端分离项目-基于springboot+vue的足球青训俱乐部管理后台系统的设计与实现(内含代码+文档+报告)

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

colab切换目录的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【MySQL】深入理解MySQL中的Join算法

原创不易,注重版权。转载请注明原作者和原文链接 文章目录 什么是JoinIndex Nested-Loop JoinBlock Nested-Loop JoinMRR & BKA总结 在数据库处理中,Join操作是最基本且最重要的操作之一,它能将不同的表连接起来,实现对数据集…

前端八股文

目录 一、CSS1.说一下CSS的盒模型。2.CSS选择器的优先级?3.隐藏元素的方法有哪些?4.px和rem的区别是什么?5.重绘重排有什么区别?6.让一个元素水平垂直居中的方式有哪些?7.CSS的哪些属性哪些可以继承?哪些不…

vscode 调试使用 make 编译的项目

1、首先点击运行 --> 启动调试: 2、选择g或gcc生成和调试活动文件: 3、出现下面提示是正常的,点击仍要调试: 点击打开“launch.json”: 4、此时会在项目工作目录下生成tsak.josn和launch.json文件: 如…

Android rtmp 低延迟直播方案:简介

Android rtmp 低延迟直播方案:简介 Android RTMP 低延迟直播方案:使用 RTMP 推送至 ZLMediaKit,通过 WebRTC 进行拉流。

【eNSP】VLAN基础配置

一、基于接口划分VLAN(Access接口和Trunk接口) 1、创建VLAN LSW1 [LSW1]vlan batch 10 20 Info: This operation may take a few seconds. Please wait for a moment...done.LSW2 [LSW2]vlan batch 10 20 Info: This operation may take a few second…