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

网站建设导航栏变化做物流网站的多少钱

网站建设导航栏变化,做物流网站的多少钱,做直播网站赚钱,嘉兴网为了了解 Spring 为什么会启动那么久#xff0c;于是看了看怎么统计一下加载 Bean 的耗时。 极简版 几行代码搞定。 import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;import java.util.HashMap; imp…为了了解 Spring 为什么会启动那么久于是看了看怎么统计一下加载 Bean 的耗时。 极简版 几行代码搞定。 import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;import java.util.HashMap; import java.util.Map;public class SpringBeanAnalyse implements BeanPostProcessor {private static final MapString, Long mapBeanTime new HashMap();Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {mapBeanTime.put(beanName, System.currentTimeMillis());return bean;}Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {Long begin mapBeanTime.get(beanName);if (begin ! null) {long ell System.currentTimeMillis() - begin;System.out.println(beanName 耗时: ell);}return bean;} }使用方法 Bean SpringBeanAnalyse SpringBeanAnalyse() {return new SpringBeanAnalyse(); }效果如图 问题是没有排序看比较费劲。 高配版 于是高配版出场了。它更为成熟壮健并有排序功能。 原理 Bean 启动时间抓取主要是围绕 Spring Bean 生命周期。BeanPostProcessor 相关方法 postProcessBeforeInstantiation: 实例化前postProcessAfterInstantiation: 实例化后postProcessBeforeInitialization: 初始化前postProcessAfterInitialization: 初始化后 注意实现MergedBeanDefinitionPostProcessor, 主要是为了调整当前 BeanPostProcessor的执行顺序到最后, 具体参考BeanPostProcessor注册流程 org.springframework.context.support.AbstractApplicationContext#refresh org.springframework.context.support.AbstractApplicationContext#registerBeanPostProcessors org.springframework.context.support.PostProcessorRegistrationDelegate#registerBeanPostProcessors 详见 源码 首先是一个 Bean。 import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;Builder Data AllArgsConstructor NoArgsConstructor class Statistics {private String beanName;private long beforeInstantiationTime;private long afterInstantiationTime;private long beforeInitializationTime;private long afterInitializationTime;public long calculateTotalCostTime() {return calculateInstantiationCostTime() calculateInitializationCostTime();}public long calculateInstantiationCostTime() {return afterInstantiationTime - beforeInstantiationTime;}public long calculateInitializationCostTime() {return afterInitializationTime - beforeInitializationTime;}public String toConsoleString() {return \t getBeanName() \t calculateTotalCostTime() \t\n;} }StartupTimeMetric源码 import com.ajaxjs.util.logger.LogHelper; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor; import org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.core.PriorityOrdered;import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors;/*** 用于调优的处理器*/ public class StartupTimeMetric implements InstantiationAwareBeanPostProcessor, PriorityOrdered, ApplicationListenerContextRefreshedEvent, MergedBeanDefinitionPostProcessor {private static final LogHelper LOGGER LogHelper.getLog(StartupTimeMetric.class);private final MapString, Statistics statisticsMap new TreeMap();/*** InstantiationAwareBeanPostProcessor 中自定义的方法 在方法实例化之前执行 Bean 对象还没有*/Overridepublic Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException {String beanClassName beanClass.getName();Statistics s Statistics.builder().beanName(beanClassName).build();s.setBeforeInstantiationTime(System.currentTimeMillis());statisticsMap.put(beanClassName, s);return null;}/*** InstantiationAwareBeanPostProcessor 中自定义的方法 在方法实例化之后执行 Bean 对象已经创建出来了*/Overridepublic boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {String beanClassName bean.getClass().getName();Statistics s statisticsMap.get(beanClassName);if (s ! null)s.setAfterInstantiationTime(System.currentTimeMillis());return true;}/*** BeanPostProcessor 接口中的方法 在 Bean 的自定义初始化方法之前执行 Bean 对象已经存在了*/Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {String beanClassName bean.getClass().getName();Statistics s statisticsMap.getOrDefault(beanClassName, Statistics.builder().beanName(beanClassName).build());s.setBeforeInitializationTime(System.currentTimeMillis());statisticsMap.putIfAbsent(beanClassName, s);return bean;}/*** BeanPostProcessor 接口中的方法 在 Bean 的自定义初始化方法执行完成之后执行 Bean 对象已经存在了*/Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {String beanClassName bean.getClass().getName();Statistics s statisticsMap.get(beanClassName);if (s ! null)s.setAfterInitializationTime(System.currentTimeMillis());return bean;}Overridepublic int getOrder() {return PriorityOrdered.HIGHEST_PRECEDENCE;}private static final AtomicBoolean START_LOCK new AtomicBoolean(false);Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {LOGGER.info(Spring 容器启动完成);if (START_LOCK.compareAndSet(false, true)) {ListStatistics sList statisticsMap.values().stream().sorted(Comparator.comparing(Statistics::calculateTotalCostTime).reversed()).collect(Collectors.toList());StringBuilder sb new StringBuilder();sList.forEach(_s - sb.append(_s.toConsoleString()));LOGGER.info(ApplicationStartupTimeMetric:\n sb);}}Overridepublic void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class? beanType, String beanName) {} }参见《应用启动加速-并发初始化spring bean》
http://www.zqtcl.cn/news/500770/

相关文章:

  • 网站索引页面网站做302重定向会怎么样
  • 精品成品冈站源码免费企业网站的内容模块
  • 网站策划的最终体现南宁网站建设培训学校
  • 网站不备案打不开怎么建网站不用买空间
  • 有没有IT做兼职的网站百度收录入口提交
  • 普洱市建设局网站重庆工程建设信息查询
  • 上海网站设计多少钱wap网站生成微信小程序
  • 广州网站到首页排名做图骂人的图片网站
  • 公司的网站建设价格wordpress付费阅读文章功能
  • 飞鸽网站建设建设网站什么软件比较好
  • 网站名称 规则网站seo完整seo优化方案
  • 昆明网站建设高端定制wordpress建站课程
  • 建网站外包wordpress 便利贴
  • 硅胶 技术支持 东莞网站建设网站互联网接入商
  • 太平洋建设21局网站微信网页版登录手机版
  • 站长统计芭乐鸭脖小猪电商平台哪个最好
  • 女与男爱做电影网站免费企业公司网站建设方案
  • 尚品本色木门网站是哪个公司做的大庆建设公司网站
  • 做网做网站建设的网站怎么用别人网站做模板
  • 电子商务网站购物车怎么做网站站点创建成功是什么意思
  • 如何做招聘网站的评估新浪微博可以做网站吗
  • 加强网站建设的制度wordpress如何清空
  • 轻松筹 的网站价格做网站建设意识形态
  • 有.net源码如何做网站湖南宣传片制作公司
  • dede网站模板怎么安装教程青岛需要做网站的公司
  • 静态双语企业网站后台源码北京网站关键词优化
  • 石家庄手机网站建设公司wordpress侧边栏显示子分类文字数
  • 公司网站客户案例个人做 网站2019
  • 个人网站怎么申请销售策划
  • 网站被黑 禁止js跳转企业为什么要建立集团