Spring学习03-[Spring容器核心技术IOC学习进阶]

IOC学习进阶

  • @Order
    • 使用@Order改变注入顺序
    • 实现Ordered接口,重写getOrder方法来改变自动注入顺序
  • @DependsOn
    • 使用
  • @Lazy
    • 全局设置-设置所有bean启动时候懒加载
  • @Scope
  • bean是单例的,会不会有线程安全问题

@Order

可以改变自动注入的顺序

比如有个animal的接口,里面两个实现类 Cat和Dog。这两个都注册为bean。此时注入的时候,就可以用list来进行接收,表示两个都进行注入。
如果还用animal来进行接收,那就会报错,因为@Autowired根据类型找到两个,然后根据名称找,此时找不到就报错

  • 类型接口
  • animal
public interface Animal {void eat();
}
  • 实现类
  • Cat
@Component
public class Cat implements Animal{@Overridepublic void eat() {System.out.println("猫吃老鼠");}
}
  • Dog
@Component
public class Dog implements Animal{@Overridepublic void eat() {System.out.println("狗吃肉");}
}
  • 使用
  @Autowiredprivate List<Animal> animal;@Testpublic void testOrder(){System.out.println(animal);}

在这里插入图片描述
可以看到先输出Cat,再输出Dog(先注入了Cat,再注入了Dog)

使用@Order改变注入顺序

此时我们可以用@Order注解自定义注入顺序

用法:@Order(数值)—数值小的先注入
让Dog先注入,Cat后注入

@Component
@Order(1)
public class Dog implements Animal{@Overridepublic void eat() {System.out.println("狗吃肉");}
}
@Component
@Order(2)
public class Cat implements Animal{@Overridepublic void eat() {System.out.println("猫吃老鼠");}
}
  • 测试
    可以和上面未加@Order进行对比,加了@Order后Dog先进行了注入
    在这里插入图片描述

实现Ordered接口,重写getOrder方法来改变自动注入顺序

这种方式了解即可

@Component
@Order(1)
public class Dog implements Animal, Ordered {@Overridepublic void eat() {System.out.println("狗吃肉");}@Overridepublic int getOrder() {return 1;}
}

@DependsOn

改变bean的创建顺序

比如下面的 B负责数据库连接,A负责数据库查询,肯定是B先创建bean,此时就可以用@DependsOn进行调整两个bean的创建顺序
在这里插入图片描述

使用

  • 不加 @DependsOn注解
  • A:数据库查询
@Component
public class A {public A() {System.out.println("数据库查询");}
}
  • B:数据库连接
@Component
public class B {public B() {System.out.println("数据库连接");}
}

在这里插入图片描述
此时可以看到在不加@DependsOn注解的时候,数据库查询bean先创建,明显不对

  • 加 @DependsOn注解
    因为数据库查询依赖数据库连接所以在数据库查询上加@DependsOn注解
    表示:A依赖B,在创建A的时候先创建B
@Component
@DependsOn("b")
public class A {public A() {System.out.println("数据库查询");}
}
  • 测试
    可以看到,数据库连接先创建,数据库查询后创建
    在这里插入图片描述

@Lazy

懒加载bean,默认是true:表示懒加载,可以设置成false,表示非懒加载
在这里插入图片描述

全局设置-设置所有bean启动时候懒加载

通过配置文件进行设置
在这里插入图片描述

@Scope

默认是单例的
在这里插入图片描述
在这里插入图片描述

bean是单例的,会不会有线程安全问题

在这里插入图片描述

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

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

相关文章

NEMU模拟器的gdb调试和指令调试

NEMU模拟器的gdb调试和指令调试 1 通过gdb调试NEMU1.1 编译NEMU1.2 gdb调试 2 通过NEMU调试指令 关于如何编译NEMU&#xff0c;以及编译MySBIBenOS固件&#xff0c;运行等前置知识&#xff0c;可参考 《NEMU模拟器源码编译与使用》。 1 通过gdb调试NEMU 1.1 编译NEMU 当我使…

E2.【C语言】练习:static部分

#include <stdio.h> int sum(int a) {int c 0;static int b 3;c 1;b 2;return (a b c); } int main() {int i;int a 2;for (i 0; i < 5;i){printf("%d ", sum(a));} } 求执行结果 c是auto类变量(普通的局部变量)&#xff0c;自动产生&#xff0c…

Windows 11 操作无法完成(错误 0x00000709)。

这里写自定义目录标题 环境错误一错误二错误三重点 环境 共享端&#xff1a;Win11 专业版 23H2 本地端&#xff1a;Win11 专业版 23H2 错误一 操作无法完成(错误 0x00000709)。 再次检查打印机名称&#xff0c;并确保打印机已连接到网络。 解决&#xff1a; 组策略设置 打开…

sql查询 只取某字段重复数据中的一条

一. 前提条件 某表的主键由两个字段A、B构成&#xff08;或者更多&#xff09;&#xff0c;任何其中一个字段都可能具有重复的数据。 需要只取字段A所有重复数据中的一条构成查询结果&#xff0c;也就是字段A取到所有的可能取值且无重复。 二. 方法一&#xff08;where ... …

Appium环境搭建,华为nova8鸿蒙系统(包括环境安装,环境配置)(一)

1.安装代码工具包 appium python client pip install appium-python-client 2.安装JDK 参考链接: ant+jmeter+jenkins从0实现持续集成(Windows)-CSDN博客 3.下载并安卓SDK 下载地址:AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载…

香橙派AIpro初体验:搭建无线随身NAS

文章目录 引言2. 香橙派 AIPro概述3. 开发准备3.0 烧录镜像3.1 需要准备的硬件3.2 需要准备的软件3.3 启动并连接香橙派 AIPro3.3.1 初始化启动香橙派 AIPro3.3.2 无线连接香橙派 AIPro3.3.3.3 VNC连接香橙派 AIPro 3.4 设置固定ip3.4.1 设置开机自动连接WIFI3.4.1 设置香橙派 …

松下Panasonic机器人维修故障原因

松下机器人伺服电机是许多工业自动化设备的关键组成部分。了解如何进行Panasonic工业机械臂电机维修&#xff0c;对于确保设备正常运行至关重要。 【松下焊接机器人维修案例】【松下机器人维修故障排查】 一、常见松下工业机械手伺服电机故障及原因 1. 过热&#xff1a;过热可…

IPython的“%paste“魔法:代码粘贴的救星

IPython的"%paste"魔法&#xff1a;代码粘贴的救星 在数据科学和编程的世界中&#xff0c;效率和便捷性是至关重要的。IPython&#xff0c;作为一个强大的交互式Python解释器&#xff0c;提供了一系列的"魔法命令"来增强用户体验。其中&#xff0c;%paste…

Spring Boot 创建定时任务

在现代应用程序开发中&#xff0c;定时任务是一个常见的需求。Spring Boot作为一个强大的框架&#xff0c;提供了简单易用的定时任务调度功能。本文将详细介绍如何在Spring Boot中创建和管理定时任务&#xff0c;并提供完整的代码示例。 1. 什么是定时任务 定时任务是指在预定…

排序查询------- ORDER BY(一)

一.关键字 ORDER BY 二.语法 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排列方式1 ,字段2 排列方式2; 三.排序方式 ASC&#xff1a;升序(默认值) DESC&#xff1a;降序 注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。 四.根据年龄对公司的员…

RabbitMQ 详解:概念、结构、使用场景与常用命令

引言 在分布式系统和微服务架构中&#xff0c;消息队列是一种重要的中间件&#xff0c;用于实现异步通信、解耦和负载均衡。RabbitMQ作为一种开源的消息队列中间件&#xff0c;以其可靠性、高可用性和灵活性&#xff0c;广泛应用于各类系统中。本文将深入探讨RabbitMQ的定义、架…

【BUUCTF-PWN】6-jarvisoj_level0

64位&#xff0c;开启了NX保护 运行效果如下&#xff1a; main函数&#xff1a; vulnerable_function()函数 buf变量长度为128&#xff0c;但是read可以读入0x200长度的字符&#xff0c;存在栈溢出&#xff0c;需要覆盖的长度为0x808 寻找后门函数 这里可以直接用栈…

计算机的错误计算(二十一)

摘要 两个不相等数相减&#xff0c;差为0&#xff1a; ? 在计算机的错误计算&#xff08;十九&#xff09;中&#xff0c;高中生小明发现本应为0的算式结果不为0. 今天他又发现对本不为0的算式&#xff0c;计算机的输出为0. 在 Python 中计算 &#xff1a; 则输出为0. 若用 C…

Android-卷积神经网络(Convolutional Neural Network, CNN)

一个复杂且在Android开发中常见的算法是图像处理中的卷积神经网络(Convolutional Neural Network, CNN)。CNN被广泛用于图像识别、物体检测和图像分割等任务,其复杂性在于需要处理大量的图像数据、复杂的神经网络结构和高效的计算。 1. 卷积操作(Convolution) 数学原理:…

R 绘图 - 饼图

R 绘图 - 饼图 饼图是一种常用的数据可视化工具&#xff0c;用于展示数据集中各个类别的相对比例。在R语言中&#xff0c;饼图可以通过多种方式绘制&#xff0c;其中最常用的是pie()函数。本文将详细介绍如何在R中创建和定制饼图&#xff0c;包括基本饼图的绘制、添加标签、调…

CSS学习(三大特性 盒子模型)

目录 Emmet语法 1.快速生成HTML结构语法 2.快速生成CSS样式语法 CSS的复合选择器 后代选择器 子选择器 并集选择器 伪类选择器 链接伪类选择器 focus伪类选择器 CSS的三大特性 层叠性 继承性 优先级 CSS盒子模型 组成 边框 边框 内边距 外边距 块级盒子水…

sharepoint api 没有这个文件所属site的权限的情况下访问指定文件

通过 SharePoint API 访问特定文件时&#xff0c;通常需要具备访问该文件所属网站 (site) 的权限。然而&#xff0c;有一些方法可以绕过这个限制&#xff0c;主要包括使用具有较高权限的应用程序权限或共享链接。这些方法的具体实现步骤如下&#xff1a; 1. 使用应用程序权限 …

7_1_SVPWM概述

1、SPWM 正弦脉宽调制法&#xff08;SPWM&#xff09;是将每一正弦周期内的多个脉冲作自然或规则的宽度调制&#xff0c;使其依次调制出相当于正弦函数值的相位角和面积等效于正弦波的脉冲序列&#xff0c;形成等幅不等宽的正弦化电流输出。 通过调整占空比使等效电流近似为正弦…

classin视频下载提取为mp4教程

最近在上classin网课&#xff0c;无奈网课视频要过期了&#xff0c;所以想保存下来&#xff01; 下面介绍提取的教程 我们可以绕过最开始的握手&#xff0c;就是先播放了一段时间后&#xff0c;再打开抓包&#xff0c;回到Classin播放后&#xff0c;就可以获得网课链接了 直接打…

软考-系统架构设计师[九年]上岸感想

2016年就开始参系统架构设计师的考试了&#xff0c;经历七次考试终于成功上岸&#xff0c;分享下自己这么多次考试失败的经验&#xff0c;希望大家可以少踩坑&#xff0c;一次通过考试 重点 如果你不想继续读下去&#xff0c;看完这段就行。 1.一定要知道最新的考试范围&…