Spring使用小技巧--排除bean无法被调用问题

我们在项目中可能由于项目的复杂性,创建了个spring的bean,但是调用却出现报错,显示无法找到该bean的异常。

这个时候我们就需要找到出错的原因,很多人往往会忽略的一点就是,你所创建的bean有可能并没有被加载到ioc容器中。但怎么去看这个bean是否被spring装载到了ioc容器呢?

我这里提供一种方法。通过spring上下文获取到beaninition,通过beanName找寻对应的bean是否被加载到ioc,需要注意,您所写的bean,是否为懒加载。

可以在启动时我们自己本地检查,另一种是运行到某个类时,再进行检查。两种方式,各位老爷任选。

废话不多说,直接上代码

启动时检查

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.scheduling.annotation.EnableAsync;import java.util.Arrays;@SpringBootApplication
@EnableAsync // springboot 开启异步支持
public class Applications {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(Applications.class, args);boolean b = Arrays.stream(context.getBeanDefinitionNames()).anyMatch(a -> {// 使用contains是因为,加载到BeanDefinition中的names有可能是全路径return a.contains("testController");});if (b) {System.out.println("存在 TestController 的bean");}}
}

类中检查

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.util.Arrays;@RestController
@Slf4j
public class ProfilesTestController {@AutowiredConfigurableApplicationContext context;@RequestMapping(method = RequestMethod.GET, path = "/profiles/test2")public void test2() {boolean match = Arrays.stream(context.getBeanDefinitionNames()).anyMatch(a -> {return a.contains("testController");});if (match)  System.out.println("存在 TestController 的bean");;}

查看执行结果

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

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

相关文章

java 溯本求源之基础(十九)之Monitoring--jconsole

目录 1.JConsole 简介 2.JConsole 的主要功能 2.1性能监控 2.2内存管理 2.3线程监控 2.4 MBean 管理 3. 使用 JConsole 监控 Java 应用的实际示例 3.1 启动和连接 JConsole 3.2详细监控内存使用情况 3.3 分析线程活动 3.4 应用调优 4. JConsole的实际应用与好处 5.…

学习Nginx(二):版本介绍和安装

版本 Nginx官方定义了Mainline、Stable、Legacy三种版本。 1. Mainline version(主线版本) 该版本包含最新的功能和bug修复,被视为开发版,即正在活跃开发中的版本。其版本号通常为单数,例如1.25.5。这个版本的更新较快…

高校学生如何去除bing首页的热搜榜以及搜索框的隐形提示?

高校学生如何去除bing首页的热搜榜以及搜索框的隐形提示? 在微软首页登录学生账户,当点击打开new tab选项之后,新展示的页面如下图所示。

新人学习笔记值(初始JavaScript)

一、Java Script是什么 1.Java Script是世界上最流行的语言之一,是一种运行在客户端的脚本语言(script是脚本的意思) 2.脚本语言:不需要编译,运行过程中由js解释器(js引擎)进行解释并运行 3.现在…

【环境配置】vsCode 中使用 conda 配置虚拟环境

文章目录 准备前言在 vsCode 中直接创建创建步骤测试更新环境 使用 Anaconda 建立虚拟环境创建步骤在 vsCode 中选择环境 总结 准备 在看本博客之前,希望大家有以下知识储备: 能够正确安装 vsCode,并配置好 python 环境;了解并安…

系统架构师考试(三)

逆向工程 战机拆解、买个新手机来拆 领域级已经到达需求了,实体关系模型ERUML B、C 净室软件工程 最后一句,总体太大时必须采用抽样方法

STC8增强型单片机开发【热敏电阻】

目录 一、引言 二、热敏电阻概述 三、STC8增强型单片机简介 四、基于STC8单片机的热敏电阻测温系统 五、热敏电阻测温系统的优化与扩展 提高测量精度 扩展系统功能 六、 温度计算步骤 通过ADC采样计算出热敏电阻位置的电压 通过欧姆定律计算热敏电阻的阻值 通过阻值…

HNCTF_RE复现(一)

baby_python hnctf.yuanshen.life:33276 网页打不开,只能 nc 连接远程服务器。 运行没有回显 利用pickletools库进行反编译为字节码(不知道为什么) # Python 3.10.12 from pickle import loads import pickletools main b"\x80\x04ct…

医学科技查新中对查新点的撰写方法!附案例讲解!

我国的科技查新工作最早是从医学领域开始的,始于1985年中国科学院医学情报所,后来逐步发展到工、农等其 他各个领域。医学科技查新包括立项查新和成果查新两个部分,其中医学立项查新,它是指在医学科研项目申报开题之前&#xff0c…

策略模式详解

策略模式 1 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进…

直播卖券有妙招:实景ai无人直播系统帮助商家自动化团购直播!

在数字化浪潮席卷的今天,直播卖券已成为商家推广和营销的重要手段。然而,如何高效、精准地利用直播卖券,让每一位观众都能沉浸在购物的乐趣中,成为商家们迫切需要解决的问题。幸运的是,实景AI无人直播系统应运而生&…

【刷题篇】二分查找(二)

文章目录 1、山脉数组的峰顶索引2、寻找峰值3、寻找旋转排序数组中的最小值4、LCR 点名 1、山脉数组的峰顶索引 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3 存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] &l…