SpringBoot - 如何查看Spring上下文中加载的Bean

五种查看Spring容器中bean的方法 在Spring应用程序中,了解和查看容器中的Bean对于调试和问题排查至关重要。本文介绍了五种常用的查看Spring容器中Bean的方法,包括使用​​、​getBean()​、​​、Spring Boot Actuator端点和调试工具。通过灵活运用这些方法,我们可以深入了解应用程序的内部结构,观察Bean的属性和状态,并有效地调试和解决潜在问题。掌握这些查看Bean的技巧,将帮助开发人员更好地利用和调试Spring容器,提高应用程序的可靠性和稳定性。 阅读详情

方法一:

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import java.util.Arrays;

/**
 * @author ROCKY
 */

@SpringBootApplication
@Slf4j
public class DroolsxApplication implements CommandLineRunner {
    public static void main(String[] args) {
        SpringApplication.run(DroolsxApplication.class, args);
        log.info("规则引擎测试服务启动成功, 正在监听中...");
    }

    @Autowired
    private ApplicationContext context;

    @Override
    public void run(String... args) throws Exception {

        String[] beans = context.getBeanDefinitionNames();
        Arrays.sort(beans);
        for (String bean : beans) {
            log.info(bean);
        }
    }
}

方法二:

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import java.util.Arrays;

/**
 * @author ROCKY
 */

@SpringBootApplication
@Slf4j
public class DroolsxApplication {
    public static void main(String[] args) {
        SpringApplication.run(DroolsxApplication.class, args);
        log.info("规则引擎测试服务启动成功, 正在监听中...");
    }

    @Bean
    public CommandLineRunner run(ApplicationContext context) {
        return args -> {
            String[] beans = context.getBeanDefinitionNames();
            Arrays.stream(beans).sorted().forEach(System.out::println);
        };
    }
}

方法三:

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.Arrays;

/**
 * @author ROCKY
 */
@SpringBootApplication
@Slf4j
public class DroolsxApplication{
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DroolsxApplication.class, args);
        String[] beans = context.getBeanDefinitionNames();
        Arrays.stream(beans).sorted().forEach(System.out::println);
        log.info("规则引擎测试服务启动成功, 正在监听中...");
    }
}

方法四:

自定义工具类 SpringUtils,实现 ApplicationContextAware接口。Spring容器会检测容器中的所有Bean,如果发现某个Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContext(ApplicationContext applicationContext)方法,并将容器本身作为参数传给该方法。
调用方法:String beanNames[] = SpringUtils.getApplicationContext().getBeanDefinitionNames();

package com.hadoopx.drools.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @author ROCKY
 */

@Component
public class SpringUtils implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        if (SpringUtils.applicationContext == null) {
            SpringUtils.applicationContext = applicationContext;
        }
    }

    // 获取ApplicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    // 根据NAME获取Bean
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    // 根据CLASS获取Bean
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    // 根据NAME,CLASS获取Bean
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
}
【Creo】关于Creo一换网络就报错许可证丢失问题解决方案 依照我的个人理解,Creo只要一更换网络,则其许可证里面的网卡参数和现在的网络就对不上了,所以就会出现报错,并且有可能是报错代码(-9),提示许可证激活有问题。 阅读详情

相关推荐

ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项

参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.youkuaiyun.com/weixin_38218267/article/details/1

aizaiyueye的专栏 3448

70. 打印所有Spring boot载入的bean

【从零开始学习SpirngBoot—常见异常汇总】 问题的提出:        我们在开发过程当中,我们可能会碰到这样的问题:No qualifying bean  就是我们定义的bean无法进行注入,那到底是什么原因呢,有时候挺难定位的,当然这个也需要养成良好的编码习惯,这样也会降低出错的几率。那么一般说是No quanlifying bean很有可能就是我们没有使用注解或者xml注入我们

悟纤学院 2万+

LoRa模块选型指南:正点原子ATK-LORA-01与SX1278芯片深度评测(含实测距离/功耗数据)

本文深度评测了正点原子ATK-LORA-01与SX1278芯片的性能表现,通过实测数据展示其在复杂环境中的通信距离与功耗表现。特别适合智慧农业、工业监测等物联网应用场景,提供详细的配置指南和优化技巧,帮助开发者实现高效、低功耗的LoRa通信解决方案。

weixin_29191081的博客 290

springboot bean找不到问题

springboot bean注入失败 expected at least 1 bean which qualifies as autowire candidate

fendouweiqian的博客 2194

[ensp报错:USG6000V错误代码45解决方案]

[ensp报错:USG6000V:错误代码45解决] [ensp报错:USG6000V:错误代码45解决] 第一种处理方式: ensp的45错误帮助文档里的解决方法:(这里就不说了,上华为爸爸的图) ensp的45错误:如果你的45错误不是描述的那个,可能是ensp与virtualbox不兼容了。 错误描述:具体表现为在virtualbox里没有vfw_usg的条目,虚拟介质管理器里也没有相应的条目: 就是vfw_usg_vdi这个 这种情况下你把ensp卸载重装多少次都没用,原因在两个软件的兼容

weixin_45456536的博客 3万+

【车辆仿真】从0开始建立dSPACE RT Simulink工程:CAN通信(RTICANMM方法)

【工程环境信息】:本文基于链接文章搭建SCALEXIO Rack RTPC总线节点,用于与AutoBox通信硬件:上位机:惠普台式PC(Windows 11专业版)下位机(实时机):AutoBox (DS1006)板卡:DS6342软件:本文所使用的DBC链接提示:以下是本篇文章正文内容,下面案例可供参考!!!的部分一定记得配置,其他的按需配置RTICANMM的灵活度非常高,尽可能参考Help文档,理解相应的配置内容官方有RTICANMM的样例工程,在下方路径。

winnizap的博客 2382

SpringBoot bean 加载顺序如何查看(源码解读)

SpringBoot bean 加载顺序如何查看,想看加载了哪些bean, 这些bean的加载顺序是什么?

Y 2201

材料仿真软件:LAMMPS_(8).温度和压力控制

在 LAMMPS 中,温度和压力的控制是通过多种恒温器和恒压器实现的。Nose-Hoover 恒温器和恒压器因其准确性和广泛适用性而被经常使用,而 Berendsen 恒温器和恒压器则因其计算效率高而适用于初步仿真或粗粒化模型。温度重标和压力重标方法虽然简单,但在某些情况下可以快速调整系统的温度和压力。通过选择合适的控制方法,可以根据具体的需求和系统特性来设计和运行分子动力学仿真,从而获得准确和可靠的结果。在实际应用中,建议先进行初步的仿真以确定合适的控制参数,然后再进行细致的仿真以验证结果的稳定性。

kkchenjj的博客 1695

IDEA项目实践——Spring框架简介,以及IOC注解

本文主要是对spring框架的简单介绍以及LOC控制反转介绍,以及基于xml的DI和注解开发案例讲解,文章当中的案例经供参考。具体的开发应用要按照具体的开发来书写。Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架。Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。

张小鱼的博客 2532

【反封禁策略】集成 Undetected-Chromedriver:让 Browser-Use 绕过 Cloudflare 五秒盾

摘要:AI Agent如何突破Cloudflare检测的实战指南 本文针对AI Agent在Cloudflare检测下频繁受阻的问题,深入分析了undetected-chromedriver的工作原理与局限性。文章指出,Cloudflare 2026年的检测体系已升级为"浏览器指纹+IP信誉+协议指纹+行为模式"的多维交叉验证,单一伪装方案难以奏效。 核心内容包括: undetected-chromedriver的三层补丁体系解析 v2与v3版本的适用场景对比 两种Browser-Use集成方案:Selen

ZDQ58818的博客 284

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

Springboot之Bean的加载过程

加载和实例化bean分以下几个重要步骤: 1、根据package扫描出需要被管理的类 2、将这些类封装成BeanDefinition并注册到BeanFactory容器 3、实例化所有扫描到的BeanDefinition,其中包括解决循环依赖、延迟加载问题 下面这张图根据Springboot启动调用链的顺序,画了这三个关键步骤被触发的时间点: 1、springboot怎么根据package扫描出需要被管理的类? springboot是通过启动类上的@ComponentScan注解所指定的包路径来进行扫描的,

肆頭的博客 1万+

关于Fluent模拟中的动态接触角UDF实现,详细设计

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1147

SpringBoot八种bean的加载方式

2.xml:context+注解(@Component+4个@Bean3.配置类+扫描+注解(@Component+4个@Bean)@Bean定义FactoryBean接口@Configuration注解的proxyBeanMethods属性4.@Import导入bean的类@Import导入配置类5.AnnotationConfigApplicationContext调用register方法6.@Import导入ImportSelector接口。

weixin_60719453的博客 8156

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Spring中Bean的加载与SpringBoot的初始化流程

前言:一直对它们之间的关系感到好奇,SpringBoot既然是Spring的封装,那么SpringBoot在初始化时应该也会有Bean的加载,那么是在何时进行加载的呢? 参考: https://blog.youkuaiyun.com/qq_36688143/article/details/84968036 https://blog.youkuaiyun.com/q610376681/article/details/87928766 https://blog.youkuaiyun.com/q610376681/article/detai

仰望星空 5704

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

如何显示Spring Boot加载的所有bean

在Spring Boot中,您可以使用appContext.getBeanDefinitionNames()来获取Spring容器加载的所有bean。 1. CommandLineRunner作为界面 应用程序 package com.mkyong; import org.springframework.beans.factory.annotation.Autowired; imp...

一名可爱的技术搬运工 5572

如何正确控制springboot中bean的加载顺序总结

1.为什么需要控制加载顺序springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题。在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件...

qianshanding0708的博客 2万+

Spring原理—加载Bean

最关键的注解是@EnableAutoConfiguration,负责第三方依赖的配置类(@Bean注解的方法获得第三方依赖的对象)和组件(比如MyBatis的@Mapper注解不属于Spring)的扫描,其中包含两个关键注解:@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})。@AutoConfigurationPackage注解把启动类所在的包下面所有的组件都注入到Spring容器中。

sniper_fandc的博客 724

Spring Boot 如何让你的 bean 在其他 bean 之前完成加载 ?

这里提到了 ConfigurationClassPostProcessor,实现了 BeanDefinitionRegistryPostProcessor 接口。它是一个非常非常重要的类,甚至可以说它是 Spring boot 提供的扫描你的注解并解析成 BeanDefinition 最重要的组件。

LoveSummer 6万+

spring测试加载指定的bean

轻量测试:优先选手动加载;集成测试:用限定扫描范围或覆盖Bean;依赖隔离:结合@MockBean和。通过精确控制Bean加载,可显著提升测试速度与可靠性。实际选择需根据测试类型和上下文需求权衡。

leijmdas的专栏 1299

springboot加载bean

spring加载bean spring基于xml配置@ComponentScan会自动扫描带有@Component,@Service,@Repository,@Controller注解的类注册成bean并自动装配 当需要注册其他的bean需要配置xml,如: <bean id="test" class="xx.xx.Test"/> springboot加载bean s...

weixin_45052750的博客 1101

动态注册Bean到Spring上下文中——基于FeignClient源码的阅读

在上一篇博文《基于Feign的局部请求拦截》的最后,我提出了如何实现系统启动将自定义注解的bean注入到Spring的ApplicationContext中,那么本博文我们就来探讨下具体的代码流程 基于Feign的局部请求拦截 小伙伴们在使用SpringCloud中集成的Feign功能时,只需要编写一个接口,然后再给接口上添加注解@FeignClient,然后配置上相关信息既可以调用其他系统的...

Amos技术足迹 1481

【Spring】Bean加载方式

registerBeanDefinitions方法的第一个参数和我们在上一种加载方式中使用过的annotationMetadata的作用是一样的,因此在这里我就不再过多介绍了,我们重点看第二个参数。第二个参数的类型是BeanDefinitionRegistry,光看名字我们知道了这是一个关于BeanDefinition的注册表,那么什么是BeanDefinition呢?这个其实涉及到spring比较底层的东西了,BeanDefinition实际上记录的是关于一个Bean的一系列信息,它包括但不限于:

qq_50675319的博客 2286

SpringBoot——Bean加载控制

简介:bean的加载控制指根据特定情况对bean进行选择性加载以达到适用项目的目标。根据之前对bean加载的八种方式,其中后面四种是可以对bean被加载时进行控制。我拿第六种来举个例子。之前也举过例子,但是实际开发呢,一般不会那么使用。通过查看某个类是否存在来控制是否加载目标类。这个类我是不存在的。所以我是没有加载这个bean的,还是老话,前面的那些暂时不看。

weixin_53535434的博客 1504

【SpringBoot】IDEA查看Spring Bean的依赖关系

IDEA查看spring bean的依赖关系

qq_45797138的博客 3649

Spring Boot 加载Bean的几种方式

01、探索springboot的加载bean几种方式 springboot启动类上的注解是一个复合注解: @SpringBootConfiguration 配置类 + @Bean 配置类作用:方便扩展、方便集成,不受包约束。 @EnableAutoConfiguration springboot内部的starter加载的原理 内部其实:配置+@Bean @ComponentScan (主要是用加载当前项目自身开发的bean) 扫包 + @Service、@Controller、@Com

PeterMrWang的博客 6650
上一篇: SpringBoot - @ConditionalOnMissingBean注解使用详解
下一篇: SpringBoot - InitializingBean的作用是什么?
cloneme01
博客等级 码龄20年 2万+粉丝 248原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值