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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java用静态工厂代替构造函数使用方法和优缺点

    java用静态工厂代替构造函数使用方法和优缺点

    这篇文章主要介绍了java用静态工厂代替构造函数使用方法和优缺点,需要的朋友可以参考下
    2014-02-02
  • SpringBoot定时任务多线程实现示例

    SpringBoot定时任务多线程实现示例

    在真实的Java开发环境中,我们经常会需要用到定时任务来帮助我们完成一些特殊的任务,本文主要介绍了SpringBoot定时任务多线程实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Mybatis plus结合springboot使用

    Mybatis plus结合springboot使用

    本文主要介绍了MyBatisPlus使用SpringBoot数据库操作,从添加依赖到测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • spring实现静态注入(类或者属性)操作示例

    spring实现静态注入(类或者属性)操作示例

    这篇文章主要为大家介绍了spring实现静态注入(类或者属性)操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Java线程中synchronized的用法与原理解析

    Java线程中synchronized的用法与原理解析

    这篇文章主要介绍了Java线程中synchronized的用法与原理解析,只要有线程,就会有并发的现象,也同时会产生数据不一致,那么对于需要使用同一个数据的两个线程,就会产生冲突,那么就引出了锁的概念,本篇会针对性的说下synchronized这个关键字,需要的朋友可以参考下
    2024-01-01
  • Java的深拷贝与浅拷贝的几种实现方式

    Java的深拷贝与浅拷贝的几种实现方式

    这篇文章主要介绍了Java的深拷贝与浅拷贝的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Mac安装Maven的几种方法小结

    Mac安装Maven的几种方法小结

    本文主要介绍了Mac安装Maven的几种方法小结,主要包括通过Homebrew安装Maven,通过SDKMAN安装Maven和通过官方网站下载安装包安装Maven,感兴趣的可以了解一下
    2024-01-01
  • spring mvc路径匹配原则详解

    spring mvc路径匹配原则详解

    这篇文章主要介绍了spring mvc路径匹配原则详解,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下,下面就和小编一起来看看吧
    2018-02-02
  • MyBatis利用MyCat实现多租户的简单思路分享

    MyBatis利用MyCat实现多租户的简单思路分享

    这篇文章主要给大家介绍了关于MyBatis利用MyCat实现多租户的简单思路的相关资料,文中的多租户是基于多数据库进行实现的,数据是通过不同数据库进行隔离,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • Java实现文件分割和文件合并实例

    Java实现文件分割和文件合并实例

    本篇文章主要介绍了Java实现文件分割和文件合并实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论