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方法中是否存在需要更多時間的邏輯,並且需要記錄這些邏輯? –