2017-09-01 70 views
0

我們如何在Spring中記錄每個bean實例?日誌彈簧bean實例化

  • 我希望每次bean初始化時都記錄一條消息。
  • 我有N個bean,我不想在每個bean的init方法上放置任何記錄器。
  • 我認爲這是一個橫切關注,但不知道如何實現這一點。

有沒有辦法。

回答

0

你可以使用Spring的事件監聽器(解釋爲here)來監聽事件。我相信你需要聽的事件是ContextRefreshedEvent,例如:

@Component 
public class MyListener 
     implements ApplicationListener<ContextRefreshedEvent> { 

    public void onApplicationEvent(ContextRefreshedEvent event) { 
     ... 
    } 
} 
+0

從春天DOC: >引發的事件當一個ApplicationContext被初始化或刷新 所以,當你的應用程序準備就緒時(它被部署或重新部署等),調用onApplicationEvent'''。在那一刻,豆類已經創建。 – ThanhLoyal

0

嘗試的org.springframework.beans.factory日誌記錄級別設置爲TRACEDEBUG

我用log4j2使用XML配置:

<logger name="org.springframework.beans.factory" level="trace"/>

0

您可以使用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; 
    } 
}