我們如何在Spring中記錄每個bean實例?日誌彈簧bean實例化
- 我希望每次bean初始化時都記錄一條消息。
- 我有N個bean,我不想在每個bean的init方法上放置任何記錄器。
- 我認爲這是一個橫切關注,但不知道如何實現這一點。
有沒有辦法。
我們如何在Spring中記錄每個bean實例?日誌彈簧bean實例化
有沒有辦法。
你可以使用Spring的事件監聽器(解釋爲here)來監聽事件。我相信你需要聽的事件是ContextRefreshedEvent
,例如:
@Component
public class MyListener
implements ApplicationListener<ContextRefreshedEvent> {
public void onApplicationEvent(ContextRefreshedEvent event) {
...
}
}
嘗試的org.springframework.beans.factory
日誌記錄級別設置爲TRACE
或DEBUG
。
我用log4j2使用XML配置:
<logger name="org.springframework.beans.factory" level="trace"/>
您可以使用BeanPostProcessor
@Component
public class LogBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
LOGGER.log(String.format("Bean instantiated with name %s and class %s", beanName, bean.getClass().getSimpleName()));
return bean;
}
}
從春天DOC: >引發的事件當一個ApplicationContext被初始化或刷新 所以,當你的應用程序準備就緒時(它被部署或重新部署等),調用onApplicationEvent'''。在那一刻,豆類已經創建。 – ThanhLoyal