0
我想开发一个Spring AOP特性,我们可以在Spring bean初始化期间放入一个点/内,以便根据业务需要计算一些统计数据。 我想知道它是否可以使用弹簧AOP模块?我们可以计算Spring bean的初始化时间
我想开发一个Spring AOP特性,我们可以在Spring bean初始化期间放入一个点/内,以便根据业务需要计算一些统计数据。 我想知道它是否可以使用弹簧AOP模块?我们可以计算Spring bean的初始化时间
您可以使用该组件测量初始化时间:
@Component
public class MyBeanPostProcessor implements BeanPostProcessor, Ordered {
private Map<String, Long> start;
private Map<String, Long> end;
public MyBeanPostProcessor() {
start = new HashMap<>();
end = new HashMap<>();
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
start.put(beanName, System.currentTimeMillis());
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
end.put(beanName, System.currentTimeMillis());
return bean;
}
@Override
public int getOrder() {
return Integer.MAX_VALUE;
}
//this method returns initialization time of the bean.
public long initializationTime(String beanName) {
return end.get(beanName) - start.get(beanName);
}
}
但是这一次不包括运行构造的时间。
但是,在所有的bean构造函数运行之前,您可以在读取bean定义之后记录一段时间。使用BeanFactoryPostProccessor它:
@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
private long launchTime;
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
launchTime = System.currentTimeMillis();
}
public long getLaunchTime() {
return launchTime;
}
}
的lauchTime是一个时刻,当春天刚刚读完的配置(例如,XML文件),并准备创建豆。
因此,完整的初始化时间可以使用这两个组件计算,如:max(end) - launchTime。 (最后一个bean被初始化和bean配置被读取的时间之间的差异)
你想计算Spring bean获取初始化时间或业务逻辑执行时间的时间段吗? –
hello..i想要计算Spring bean获取初始化时间。使用这段时间我们需要计算一些商业标准 –
只是好奇什么样的业务标准依赖于spring初始化时间? init方法中是否存在需要更多时间的逻辑,并且需要记录这些逻辑? –