SpringBoot对Bean的管理

news2025/1/19 23:18:13

Bean扫描

Spring中使用标签扫描或者注解

Springboot中没有使用标签或者注解它是怎么扫描的我的controlelr,service等等

核心在于springboot启动类中的@SpringBootApplication注解

此注解其实是一个组合注解

它组合了一个@ComponentScan注解,相当于在启动类也添加了这个注解,所以不需要我们手动添加也可以扫描

但是我们没有设置它的扫描范围它是怎么扫描的呢,那是因为,它的默认扫描范围是添加了该注解的类所在的包及其子包

如果想要扫描到启动类所在包之外的包,需要手动在启动类中配置@ComponentScan

Bean注册

如果要注册的bean对象来自第三方(不是自定义的),是无法用@Component及衍生注解声明bean的

使用Maven命名将第三方jar安装到本地仓库

然后win + R-->cmd输入脚本

在pom.xml中引入依赖

@Bean

  • 在启动类中创建一个方法,次方法只需要返回一个对象就行(不推荐使用)

测试

如果想要通过名字来获取直接写方法名

对象默认的的名字就是:方法名

自定义名字@Bean(“自己取名字”)

  • 创建一个配置类,在配置类里面集中注册

使用@ Configuration来标识当前类是一个配置类

配置类也需要放到启动类所在的包或子包下才会被扫描

在配置类中添加一模一样的方法

注入多个第三方对象,在配置中继续写方法

如果方法的内部需要使用到ioc容器中已经存在的bean对象,那么只需要在方式上声明,以参数的形式传入,spring会自动注入

@Import

在启动类上使用@Import(xxx.class),导入一个其他类,spring会自动把xxx类注入到ioc容器中,这里的xxx类可以是任意类(普通类,配置类)

常用的类

       导入配置类

       导入ImportSelector接口实现类

配置类

@Import(配置类.class)

一旦用了@Import相当于我在手动扫描这个类,没有用自动扫描,所以当配置类没有在启动类的包或子包下也能扫描到

注入多个配置类

不推荐,建议使用导入ImportSelector接口实现类

@Import({配置类.class ,配置类.class ,配置类.class ,配置类.class })

ImportSelector接口实现类

定义一个类去实现ImportSelector接口,重写selectImports()方法

Springboot会自动调用selectImports()方法,得到全限定名的数组,然后把这些类的bean对象自动注入到ioc容器中

为了防止硬编码,这些全限定名一般写入文件中,然后从文件中读取出来

文件中的一个全限定名写一行

优化@Import注解

在启动类上使用@Import(CommonImportSelector.class),感觉不好看,

能不能像@SpringBootApplication这样

自定义一个注解

需要复制

@Target({ElementType.TYPE}) //可以在类上使用

@Retention(RetentionPolicy.RUNTIME) //可以保留在运行时阶段

在添加上一个ImportSelector接口实现类

@Import(CommonImportSelector.class)

优化后

Bean注册条件

给第三方bean对象注入值的方式

方式一

在方法中手动赋值(不推荐使用)

方法二

从文件中读取

使用@Value来获取值

当我们将配置文件中的数据注释了在使用@Value获取,在注入到对象时就会报错,有没有一种方法,当我们配置文件有数据时注入对象,没有数据时就不注入对象。

这时候就要用到bean的注册条件了

SpringBoot提供了设置注册生效条件的注解@Conditional,此数据使用很麻烦,所以它提供了很多的衍生注解。

三个常用注解

@ConditionalOnProperty(prefix = “前缀”,name = “指定键名(方法参数名)”)

@ConditionalOnMissingBean(xxx.class)

@ConditionalOnProperty(name = “指定类的全限定名”)

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

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

相关文章

小游戏选型(二):第三方社交小游戏厂家对比,即构/声网/融云/云信等

前言: 上一篇文章我们主要介绍社交游戏化趋势,并分析了直播平台面临的买量贵、变现难等问题,探讨了小游戏作为新的运营变现玩法的优势。同时还列举了各大直播平台TOP5的小游戏。今天我们继续介绍小游戏系列内容,本文是该系列的第…

【Docker】快速入门手册

目录 1.概述 1.1.安装 1.2.阿里云镜像加速 1.3.运行原理 2.常用操作 2.1.帮助命令 2.2.镜像操作 2.3.容器操作 2.3.1创建、启动 2.3.2.退出、停止 2.3.3.进入交互式界面 2.3.4.守护式容器交互 2.3.5.查看 2.3.6.删除 2.3.7.拷贝 3.容器数据卷 3.1.概述 3.2.使…

阅读记录:RNNLOGIC: LEARNING LOGIC RULES FOR REASON-ING ON KNOWLEDGE GRAPHS

一、介绍 本文研究知识图谱推理的学习逻辑规则。 逻辑规则在用于预测时提供可解释的解释,并且能够推广到其他任务。现有方法要么面临在大搜索空间中搜索的问题(例如神经逻辑编程),要么由于奖励稀疏而导致优化无效(例…

Vue-Cli3 - 从安装 nodejs 配置环境 ~ 搭建 cli 脚手架项目全过程

目录 前言提示 一、安装 & 配置 nodejs 1.1、安装 nodejs 1.2、配置必要目录 1.3、配置环境变量 1.4、测试 安装&配置 是否成功 1.5、安装淘宝镜像 1.5、cnpm 安装(推荐安装) 二、vue-cli3 创建项目 2.1、vue-cli2 和 vue-cli3 主要区…

玩转WEB接口之三 【HTTPS证书申请】

文章目录 一、概述主要流程二、域名注册1. 购买域名2. 购买服务器3. 域名备案4. 域名解析 三、证书申请1. 申请途径2. 阿里云3个月免费SSL申请3. freessl 1年免费SSL申请 四、证书验证1. springboot 代码验证1.) 证书转换2.) 验证结果3.) 源码传送 2. nginx验证 一、概述 HTTP…

行测-资料:2. 一般增长率、增长量

1、一般增长率 1.1 百分数和百分点 50%,20% 1.2 增长率和倍数 1.5;50 1.3 成数和翻番 1.4 增幅,降幅,变化幅度 A,A,D B,高于全国增速 2.3 个百分点,21.8 - 2.3 19.5。 5%&#xff0…

数字图像处理(实践篇)三十四 OpenCV-Python绘制椭圆

目录 一 涉及的函数 二 实践 一 涉及的函数 cv2.ellipse(img,center,axes,angle,start_angle,end_angle,color,thickness) 参数: ①<

精品基于Uniapp+ssm宠物时光管理系统App

《[含文档PPT源码等]精品基于Uniappssm宠物时光管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框架&#xff1a…

【目标跟踪】多相机环视跟踪

文章目录 一、前言二、流程图三、实现原理3.1、初始化3.2、输入3.3、初始航迹3.4、航迹预测3.5、航迹匹配3.6、输出结果 四、c 代码五、总结 一、前言 多相机目标跟踪主要是为了实现 360 度跟踪。单相机检测存在左右后的盲区视野。在智能驾驶领域&#xff0c;要想靠相机实现无…

工厂生产管理MES系统,开源代码+维护

商业开源的一套超有价值的JAVA制造执行MES系统源码 亲测 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境&#xff1a;jdk11tomcatmysql8springbootmaven 需要源码&#xff0c;私信我获取&#xff0c;可以项目合作维护一、系统概述&#xff1a; MES制造执行系统&…

2024年最新 MySQL的下载、安装、启动与停止

一、MySQL的下载 MySQL最常用的2个版本&#xff1a; 社区版&#xff1a;免费开源&#xff0c;自由下载&#xff0c;不提供官方技术支持&#xff0c;大多数普通用户选择这个即可。企业版&#xff1a;需要付费&#xff0c;不能在线下载&#xff0c;可以使用30天&#xff0c;提供…

SpringBoot深入解析:掌握自动装配机制及其定制化原理

推荐一款我一直在用的ChatGPT4.0国内站点&#xff0c;每日有免费使用额度&#xff0c;支持PC、APP、VScode插件同步使用 SpringBoot篇&#xff1a;SpringBoot的自动装配原理 SpringBoot是一个旨在简化Spring应用初始搭建以及开发过程的框架。它利用了Spring框架的依赖注入特性…

nodejs学习计划--(七)express框架

express框架 1. express介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs.com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB …

【GitHub项目推荐--不错的 React 开源项目】【转载】

用 React Flow 连接你的想法 用 React Flow 连接你的想法&#xff0c;这是一个高度可定制的库&#xff0c;基于 React 用于构建基于节点的 交互式 UI、编辑器、流程图和图表。 开源地址&#xff1a;https://github.com/wbkd/react-flow Bulletproof React 一个简单、可扩展且…

Vue3+Vite使用Puppeteer进行SEO优化(SSR+Meta)

1. 背景 【笑小枫】https://www.xiaoxiaofeng.com上线啦 资源持续整合中&#xff0c;程序员必备网站&#xff0c;快点前往围观吧~ 我的个人博客【笑小枫】又一次版本大升级&#xff0c;虽然知道没有多少访问量&#xff0c;但我还是整天没事瞎折腾。因为一些功能在Halo上不太好实…

C++ 右值引用 std::move和std::forward的使用

前言 右值引用&#xff0c;std::move(移动语义)和std::forward(完美转发)都是C11里面的特性。 使用右值引用和移动语义&#xff0c;可以避免无谓的复制&#xff0c;提供了程序性能。 右值引用 在说明右值引用之前&#xff0c;先说下什么是左值&#xff0c;什么是右值。 左值…

Stable Diffusion与Midjourney:如何做出明智之选?

Stable Diffusion与Midjourney&#xff1a;如何做出明智之选&#xff1f; 在人工智能领域中&#xff0c;Stable Diffusion和Midjourney是两个备受瞩目的技术。它们各自具有独特的特点和优势&#xff0c;但选择哪一个更适合您的需求呢&#xff1f;本文将为您详细分析两者的差异…

Unity中创建Ultraleap 3Di交互项目

首先&#xff0c;创建新的场景 1、创建一个空物体&#xff0c;重命名为【XP Leap Provider Manager】&#xff0c;并在这个空物体上添加【XR Leap Provider Manager】 在物体XP Leap Provider Manager下&#xff0c;创建两个子物体Service Provider(XR)和Service Provider(…

蓝桥杯省赛无忧 课件46 第5次学长带练配套课件

01 聪明的小羊肖恩 02 阿坤老师的独特瓷器 03 妮妮的月饼工厂 04 可凑成的最大花束数 05 四个瓶子的问题 06 如今扔是遥远的理想之城

12.5内存操作流(血干JAVA系列)

12.5内存操作流 12.5内存操作流ByteArraylnputStream类的主要方法ByteArrayOutputStream 类的主要方法【例12.33】使用内存操作流完成一个大写字母转换为小写字母的程序 12.5内存操作流 在 流 的 操 作 中 除 了 进 行 文 件 的 输 入 与 输 出 操 作 之 外 &#xff0c; 也 可…