当前位置: 首页 > news >正文

自定义bean 加载到spring IOC容器中

自定义bean加载到spring容器中的两种方式:

  • 1.在类上添加注解@Controller@RestController(本质是@Controller)、@Service@Repository@Component
  • 2.使用@Configuration@Bean
    这篇文章主要介绍第二种方式原理(因为在实际使用中,第二种方式遇到了一个问题,记录一下)。

抛出问题

在微服务中定义一个文件上传模块,目的是为了以后在其他任何需要的微服务中直接引用。由于配置是在配置文件中,需要使用@Value("${xxx}")获取配置(VolcengineUtils.java中获取),故需要被spring注解扫描到,并初始化上传对象,但是始终没有初始化这个配置文件!!!

@Configuration
public class VolcengineConfig {@Value("${meta.volcengine.endPoint}")private String endPoint;@Value("${meta.volcengine.region}")private String region;@Value("${meta.volcengine.accessKey}")private String accessKey;@Value("${meta.volcengine.secretKey}")private String secretKey;@Value("${meta.volcengine.bucketName}")private String bucketName;@Beanpublic void initVolcengineInfo(){VolcengineUtils.setClient(new TOSV2ClientBuilder().build(region, endPoint, accessKey, secretKey));VolcengineUtils.setBucketName(bucketName);}
}

思考1:直接把配置文件放到项目中没有问题,移出作为一个模块怎么就会有问题?

对比后发现:服务项目和上传组件的包(package)的名称不一样
服务项目:
在这里插入图片描述
上传组件:
在这里插入图片描述
然后修改上传组件的包名为:com.meta.modules.file.volcengine
再次启动:没问题了!

思考2.为什么修改包名相同就可以了?那如果对外提供组件,总不能要求别人的服务项目和组件同包名吧?

于是继续寻找解决方案:然后找到在resources资源目录下META-INF\spring.factories中增加扫描路径可以被spring加载,于是增加META-INF\spring.factories文件(上传组件包名已还原为:com.meta.core.file.volcengine)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.meta.core.file.volcengine.VolcengineConfig

再次启动:没问题了!

回答思考1不同包名不能被扫描问题:

1.服务启动项:点击注解@SpringBootApplication进入

在这里插入图片描述

2.点击注解@ComponentScan进入

在这里插入图片描述
注释翻译:如果指定的包没有被定义,则扫描将从声明该注释的类的包中进行。也就是如果没有配置@ComponentScan注解中basePackageClassesbasePackagesvalue的值,则从@SpringBootApplication注解类所在的包开始扫描

思考3.spring.factories配置是如何加载的?

1.服务启动项:点击注解@SpringBootApplication进入–>点击注解@EnableAutoConfiguration进入

在这里插入图片描述
发现有一个自动配置导入选择器,点击进入AutoConfigurationImportSelector.class类中
在这里插入图片描述
通过断点即可发现:在spring.factories中指定的配置已经被加载到spring容器中。
优化VolcengineConfig类: 使用spring.factories加载配置显然更通用,其次此处只需要初始化一次配置,不需要把initVolcengineInfo声明为bean。使用@PostConstruct在bean加载完成后初始化一次即可

public class VolcengineConfig {@Value("${meta.volcengine.endPoint}")private String endPoint;@Value("${meta.volcengine.region}")private String region;@Value("${meta.volcengine.accessKey}")private String accessKey;@Value("${meta.volcengine.secretKey}")private String secretKey;@Value("${meta.volcengine.bucketName}")private String bucketName;@PostConstructpublic void initVolcengineInfo(){VolcengineUtils.setClient(new TOSV2ClientBuilder().build(region, endPoint, accessKey, secretKey));VolcengineUtils.setBucketName(bucketName);}
}

相关文章:

自定义bean 加载到spring IOC容器中

自定义bean加载到spring容器中的两种方式: 1.在类上添加注解Controller、RestController(本质是Controller)、Service、Repository、Component2.使用Configuration和Bean 这篇文章主要介绍第二种方式原理(因为在实际使用中&#…...

[python入门㊻] - python装饰器和类的装饰器

目录 ❤ python装饰器介绍 ❤ 什么是装饰器 ❤ 装饰器的流程 ❤ 定义装饰器时通常会涉及以下3个函数 无参装饰器 有参装饰器 多重装饰器 ❤ 装饰器的用法(闭包) ❤ 装饰器语法糖 ❤ 时间计时器 ❤ 装饰器中wraps作用 不使用wraps装饰器 使用wraps装饰器解…...

企业级信息系统开发学习1.1 初识Spring——采用Spring配置文件管理Bean

文章目录一、Spring容器演示——采用Spring配置文件管理Bean(一)创建Maven项目(二)添加Spring依赖(三)创建杀龙任务类(四)创建勇敢骑士类(五)采用传统方式让勇…...

CSS盒子模型

盒子模型 CSS三大特性 继承性、层叠性、优先级 优先级比较 继承 < 通配符选择器 < 标签选择器 < 类选择器 < id选择器 < 行内样式 < !important 注意&#xff1a;!important不能提升继承的优先级&#xff0c;只要是继承优先级最低 复合选择器权重叠加计…...

Python基础学习笔记 —— 数据结构与算法

数据结构与算法1 数据结构基础1.1 数组1.2 链表1.3 队列1.4 栈1.5 二叉树2 排序算法2.1 冒泡排序2.2 快速排序2.3 &#xff08;简单&#xff09;选择排序2.4 堆排序2.5 &#xff08;直接&#xff09;插入排序3 查找3.1 二分查找1 数据结构基础 本章所需相关基础知识&#xff1a…...

笔记本连接wifi,浏览器访问页面,显示访问被拒绝

打开chrome、edge浏览器访问第1个第2个页面正常&#xff0c;后面再打开页面显示异常。 但手机连接正常&#xff0c;笔记本连接异常&#xff0c;起初完全没有怀疑是wifi问题 以为用了vpn软件问题&#xff0c;认为中了病毒。杀毒&#xff0c;并没有中毒。 1、关闭vpn代理&#…...

36个物联网专业毕业论文选题推荐

物联网技术在智能家居系统中的应用研究物联网在智慧城市建设中的作用物联网在工业4.0中的实现与发展 物联网与智能物流系统的结合物联网与医疗健康领域的融合研究物联网与环境监测系统的集成物联网与农业生产的结合研究物联网技术对汽车行业的影响与发展物联网在智能安防领域的…...

Pytorch复习笔记--torch.nn.functional.interpolate()和cv2.resize()的使用与比较

1--前言 博主在处理图片尺度问题时&#xff0c;习惯使用 cv2.resize() 函数&#xff1b;但当图片数据需用显卡加速运算时&#xff0c;数据需要在 GPU 和 CPU 之间不断迁移&#xff0c;导致程序运行效率降低&#xff1b; Pytorch 提供了一个类似于 cv2.resize() 的采样函数&…...

ASP.NET Core MVC 项目 AOP之ActionFilterAttribute

目录 一:说明 二:实现ActionFilterAttribute父类 一:说明 ActionFilterAttribute比前两者简单方便,易于扩展,不易产生代码冗余。 ActionFilterAttribute过滤器执行顺序: 1:执行控制器中的构造函数,实例化控制器 2:执行ActionFilterAttribute.OnActionExecutionA…...

浅析EasyCVR安防视频能力在智慧小区建设场景中的应用及意义

一、行业需求 城市的发展创造了大量工作机会&#xff0c;人口的聚集也推动了居民住宅建设率的增长。人民生活旨在安居乐业&#xff0c;能否住得“踏实”是很多劳动工作者最关心的问题。但目前随着住宅小区规模的不断扩大、人口逐渐密集&#xff0c;在保证居住环境舒适整洁的同…...

Python的深、浅拷贝到底是怎么回事?一篇解决问题

嗨害大家好鸭&#xff01;我是小熊猫~ 一、赋值 Python中&#xff0c; 对象的赋值都是进行对象引用&#xff08;内存地址&#xff09;传递, 赋值&#xff08;&#xff09;&#xff0c; 就是创建了对象的一个新的引用&#xff0c; 修改其中任意一个变量都会影响到另一个 will …...

TCP协议十大特性

日升时奋斗&#xff0c;日落时自省 目录 1、确认应答 1.1、序号编辑 2、超时重传 3、连接管理 3.1、三次握手 3.2、四次挥手 4、滑动窗口 5、流量控制 6、拥塞控制 7、延时应答 8、捎带应答 9、面向字节流 10、异常情况 TCP协议&#xff1a; 特点&#xff1a;有…...

2.14作业【GPIIO控制LED】

设备树 myleds{ myled1 <&gpioe 10 0>; myled2 <&gpiof 10 0>; myled3 <&gpioe 8 0>; }; 驱动代码 #include<linux/init.h> #include<linux/module.h> #include<linux/of.h&…...

5min搞定linux环境Jenkins的安装

5min搞定linux环境Jenkins的安装 安装Jenkinsstep1: 使用wget 命令下载Jenkinsstep2、创建Jenkins日志目录并运行jekinsstep3、访问jenkins并解锁jenkins,安装插件以及创建管理员用户step4、到此,就完成了Finish、以上步骤中遇到的问题1、 jenkins启动不了2、jenkins无法访问…...

Cortex-M0存储器系统

目录1.概述2.存储器映射3.程序存储器、Boot Loader和存储器重映射4.数据存储器5.支持小端和大端数据类型数据对齐访问非法地址多寄存器加载和存储指令的使用6.存储器属性1.概述 Cortex-M0处理器具有32位系统总线接口&#xff0c;以及32位地址线&#xff08;4GB的地址空间&…...

软件测试——测试用例之场景法

一、场景法的应用场合 场景法主要用于测试软件的业务流程和业务逻辑。场景法是基于软件业务的测试方法。在场景法中测试人员把自己当成最终用户&#xff0c;尽可能真实的模拟用户在使用此软件的操作情景&#xff1a; 重点模拟两类操作&#xff1a; 1&#xff09;模拟用户正确…...

英文写作中的常用的衔接词

1. 增补 (Addition) in addition, furthermore, again, also, besides, moreover, whats more, similarly, next, finally 2.比较&#xff08;Comparision&#xff09; in the same way, similarly, equally, in comparison, just as 3. 对照 (Contrast) in contrast, on …...

新库上线 | CnOpenData中国地方政府债券信息数据

中国地方政府债券信息数据 一、数据简介 地方政府债券 指某一国家中有财政收入的地方政府地方公共机构发行的债券。地方政府债券一般用于交通、通讯、住宅、教育、医院和污水处理系统等地方性公共设施的建设。地方政府债券一般也是以当地政府的税收能力作为还本付息的担保。地…...

Python 条件语句

Python条件语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空&#xff08;null&#xff09;值为true&#xff0c;0 或者 null为false。 Python 编…...

C语言思维导图大总结 可用于期末考试 C语言期末考试题库

目录 一.C语言思维导图 二.C语言期末考试题库 一.C语言思维导图 导出的图可能有点糊&#xff0c;或者查看链接&#xff1a;https://share.weiyun.com/uhf1y2mp 其实原图是彩色的不知道为什么导出时颜色就没了 部分原图&#xff1a; 也可私信我要全图哦。 图里的链接可能点不…...

从零实现深度学习框架——再探多层双向RNN的实现

来源&#xff1a;投稿 作者&#xff1a;175 编辑&#xff1a;学姐 往期内容&#xff1a; 从零实现深度学习框架1&#xff1a;RNN从理论到实战&#xff08;理论篇&#xff09; 从零实现深度学习框架2&#xff1a;RNN从理论到实战&#xff08;实战篇&#xff09; 从零实现深度…...

Flink 连接流详解

连接流 1 Union 最简单的合流操作&#xff0c;就是直接将多条流合在一起&#xff0c;叫作流的“联合”&#xff08;union&#xff09;。联合操作要求必须流中的数据类型必须相同&#xff0c;合并之后的新流会包括所有流中的元素&#xff0c;数据类型不变。这种合流方式非常简…...

分享112个HTML电子商务模板,总有一款适合您

分享112个HTML电子商务模板&#xff0c;总有一款适合您 112个HTML电子商务模板下载链接&#xff1a;https://pan.baidu.com/s/13wf9C9NtaJz67ZqwQyo74w?pwdzt4a 提取码&#xff1a;zt4a Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 有机蔬菜水果食品商城网…...

2023备战金三银四,Python自动化软件测试面试宝典合集(八)

马上就又到了程序员们躁动不安&#xff0c;蠢蠢欲动的季节~这不&#xff0c;金三银四已然到了家门口&#xff0c;元宵节一过后台就有不少人问我&#xff1a;现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试&#xff0c;一个程序员成长之路永恒绕…...

J-Link RTT Viewer使用教程(附代码)

目录 RTT(Real Time Transfer)简介 使用教程 常用API介绍 RTT缓冲大小修改 使用printf重定向 官方例程 RTT(Real Time Transfer)简介 平常调试代码中使用串口打印log&#xff0c;往往需要接出串口引脚&#xff0c;比较麻烦&#xff0c;并且串口打印速度较慢&#xff0c;串…...

C语言——指针、数组的经典笔试题目

文章目录前言1.一维数组2.字符数组3.二维数组4.经典指针试题前言 1、数组名通常表示首元素地址&#xff0c;sizeof(数组名)和&数组名两种情况下&#xff0c;数组名表示整个数组。 2、地址在内存中唯一标识一块空间&#xff0c;大小是4/8字节。32位平台4字节&#xff0c;64位…...

【C语言】程序环境和预处理|预处理详解|定义宏(上)

主页&#xff1a;114514的代码大冒险 qq:2188956112&#xff08;欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ &#xff09; Gitee&#xff1a;庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 一、程序的翻译环境和执行环境 二、详解编译和链接 1.翻译环境 2.编…...

上海霄腾自动化装备盛装亮相2023生物发酵展

上海霄腾自动化携液体膏体粉剂颗粒等灌装生产线解决方案亮相2023生物发酵展BIO CHINA2023生物发酵展&#xff0c;作为生物发酵产业一年一度行业盛会&#xff0c;由中国生物发酵产业协会主办&#xff0c;上海信世展览服务有限公司承办&#xff0c;2023第10届国际生物发酵产品与技…...

python+flask开发mock服务

目录 什么是mock&#xff1f; 什么时候需要用到mock&#xff1f; 如何实现&#xff1f; pythonflask自定义mock服务的步骤 一、环境搭建 1、安装flask插件 2、验证插件 二、mock案例 1、模拟 返回结果 2、模拟 异常响应状态码 3、模拟登录&#xff0c;从jmeter中获取…...

数据库(三)

第三章 MySQL库表操作 3.1 SQL语句基础 3.1.1 SQL简介 SQL&#xff1a;结构化查询语言(Structured Query Language)&#xff0c;在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。使用SQL语句&#xff0c;程序员和数据库管理员可以完成如下的任务。 改变数据…...

贵州省住房和城乡建设官方网站/b站推广入口2023mmm无病毒

原因&#xff1a;用SourceTree提交代码&#xff0c;发现这个问题。好像是因为上个进程没停止&#xff0c;造成文件不识别 解决&#xff1a;把仓库目录里的.git/index.lock文件(文件是隐藏的)删除就可以了。删除index.lock不会影响Git使用。是说index文件被锁住了&#xff0c;但…...

wordpress4.3下载/网站模板之家免费下载

概念 IOC(Inversion of Control) 其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也…...

改域名 wordpress/搜索引擎优化seo名词解释

目录 开始信息 形容整个过程的不合理 几个选项的选择 留悬念与对比 说明特点 数量强调 开始信息 形容整个过程的不合理 ps: 说明人之间的对话&#xff0c;其实不会每次都叫名字的 几个选项的选择 留悬念与对比 说明特点 数量强调...

腾讯网站开发规范/站长网站提交

EEG 基础 脑电图&#xff08;Electroencephalogram,EEG&#xff09;是通过精密的电子仪器&#xff0c;从头皮上将脑部的自发性生物电位加以放大记录而获得的图形&#xff0c;是通过电极记录下来的脑细胞群的自发性、节律性电活动。有常规脑电图、动态脑电图监测、视频脑电图监…...

网站建设技术团队有多重要/品牌关键词排名优化怎么做

今天来说一下关于flash player中安装失败怎么解决这方面的一些讯息&#xff0c;不少朋友对于flash player中安装失败怎么解决这方面的信息颇感兴趣的。小编今天就为此整理一些相关的讯息&#xff0c;希望对有需要的朋友有所帮助。flash player中安装失败的处理详解1、开始——…...

wordpress添加富强民主/网络热词缩写

首先根据你的问题&#xff0c;先实际运行一下代码&#xff0c;如下&#xff1a;通过代码结果&#xff0c;我们看到两者都是True&#xff0c;所以是相等的为什么相等呢&#xff1f;此处涉及到运算优先级的问题1、首先比较容易理解的是当x是空字符串&#xff0c;也就是什么都没有…...