springboot 显示打印加载bean耗时工具类的案例

 更新时间:2025年07月08日 10:41:54   作者:健康平安的活着  
文章介绍了Spring框架的Aware接口及其应用场景,如获取BeanFactory、Environment等资源信息,并通过案例演示了Spring Boot中监控Bean加载耗时的工具类实现,用于性能分析与调试,感兴趣的朋友跟随小编一起看看吧

一  spring的原生接口说明

1.1 接口说明

Aware是Spring框架提供的一组特殊接口,可以让Bean从Spring容器中拿到一些资源信息。

BeanFactoryAware:实现该接口,可以访问BeanFactory对象,从而获取Bean在容器中的相关信息。

EnvironmentAware:实现该接口,可以访问Environment对象,从而获取环境相关的配置属性,比如系统属性、环境变量等。

ResourceLoaderAware:实现该接口,可以访问ResourceLoader对象,从而获取资源加载器,用于加载类路径下的资源文件。

MessageSourceAware:实现该接口,可以访问MessageSource对象,从而获取国际化消息。

1.2  案例说明

 1.打印耗时

package com.ljf.springboot.mybaits.demos.config;
/**
 * @ClassName: TimeCostBeanPostProcessor
 * @Description: TODO
 * @Author: admin
 * @Date: 2025/06/29 17:48:32 
 * @Version: V1.0
 **/
import com.google.common.collect.Maps;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @author admin
* @description
这个类实现了Spring框架的BeanPostProcessor接口,用于在bean初始化前后记录每个bean的创建时间成本
* @param
* @return
*/
@Component
public class TimeCostBeanPostProcessor implements BeanPostProcessor {
    private Map<String, Long> costMap = Maps.newConcurrentMap();
    private Long costSumTime = 0L;
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        costMap.put(beanName, System.currentTimeMillis());
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (costMap.containsKey(beanName)) {
            Long start = costMap.get(beanName);
            long cost = System.currentTimeMillis() - start;
            if (cost > 0) {
                costMap.put(beanName, cost);
                System.out.println("bean: " + beanName + "\ttime: " + cost);
            }
        }
        return bean;
    }
}

2.监控事件

package com.ljf.springboot.mybaits.demos.config;
/**
 * @ClassName: ApplicationEventListener
 * @Description: TODO
 * @Author: admin
 * @Date: 2025/06/29 17:44:41 
 * @Version: V1.0
 **/
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* @author admin
* @description
这个类实现了Spring框架的ApplicationListener<ApplicationEvent>接口,用于监听并处理应用上下文中的事件。
* @param
* @return
*/
@Component
public class ApplicationEventListener implements ApplicationListener<ApplicationEvent> {
    private static final Logger logger = LoggerFactory.getLogger(ApplicationEventListener.class);
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        logger.info("=======event received : {}", event.getClass().getName());
    }
}

测试案例结果:

到此这篇关于springboot 显示打印加载bean耗时工具类的文章就介绍到这了,更多相关springboot 打印加载bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Cloud原理以及核心组件详解

    Spring Cloud原理以及核心组件详解

    这篇文章主要介绍了Spring Cloud原理以及核心组件详解,spring cloud有5个核心组件,文章中进行了一一的详细介绍,需要的朋友可以参考下
    2023-03-03
  • Java多线程应用循环输出ABC方式

    Java多线程应用循环输出ABC方式

    这篇文章主要介绍了Java多线程应用循环输出ABC方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • jsp、struts、spring、mybatis实现前端页面功能模块化拆分的方案

    jsp、struts、spring、mybatis实现前端页面功能模块化拆分的方案

    这篇文章主要介绍了 jsp、struts、spring、mybatis实现前端页面功能模块化拆分的方案,非常不错,需要的朋友参考下
    2017-01-01
  • springboot + elasticsearch 实现聚合查询的详细代码

    springboot + elasticsearch 实现聚合查询的详细代码

    文章介绍了如何在Spring Boot 2.2.6中使用Elasticsearch进行聚合查询,重点在于通过API创建索引和映射,而不是使用Spring Data Elasticsearch的自动创建功能,文章还提到在创建映射时,Elasticsearch会自动为keyword类型添加keyword属性,感兴趣的朋友一起看看吧
    2025-02-02
  • SpringBoot返回文件让前端下载的几种方式

    SpringBoot返回文件让前端下载的几种方式

    文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供了从网络上获取文件和文本并下载的示例,并总结了InputStream和OutputStream的区别,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • java的package和import机制原理解析

    java的package和import机制原理解析

    这篇文章主要介绍了java的package和import机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Spring Boot中进行 文件上传和 文件下载功能实现

    Spring Boot中进行 文件上传和 文件下载功能实现

    开发Wb应用时,文件上传是很常见的一个需求,浏览器 通过 表单形式 将 文件 以 流的形式传递 给 服务器,服务器再对上传的数据解析处理,下面将通过一个案例讲解使用 SpringBoot 实现 文件上传,感兴趣的朋友一起看看吧
    2024-07-07
  • MybatisPlus自定义Sql实现多表查询的示例

    MybatisPlus自定义Sql实现多表查询的示例

    这篇文章主要介绍了MybatisPlus自定义Sql实现多表查询的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • java 代码块与静态代码块加载顺序

    java 代码块与静态代码块加载顺序

    这篇文章主要介绍了java 代码块与静态代码块加载顺序的相关资料,需要的朋友可以参考下
    2017-07-07
  • Java 中一个类提供一个默认对象的多种方法

    Java 中一个类提供一个默认对象的多种方法

    这篇文章主要介绍了Java 中一个类提供一个默认对象的多种方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07

最新评论