2017-09-01 7 views
0

Wie können wir jede Bean-Instantiierung im Frühling protokollieren?Log-Spring-Bean-Instanziierung

  • Ich möchte jedes Mal eine Nachricht protokollieren, wenn eine Bean initialisiert wird.
  • Ich habe N Anzahl der Bean und ich möchte keine Logger auf Init-Methode für jede Bean setzen.
  • Ich sehe dies als eine Querschnittsaufgabe, aber nicht sicher, wie dies zu erreichen ist.

Gibt es einen Weg.?

Antwort

0

Sie können den Ereignis-Listener von Spring verwenden (erläutert here), um nach Ereignissen zu suchen. Ich glaube, das Ereignis, das Sie ContextRefreshedEvent ist zu hören brauchen, z.B .:

@Component 
public class MyListener 
     implements ApplicationListener<ContextRefreshedEvent> { 

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

Von Frühling doc: > Ereignis ausgelöst, wenn ein Application initialisiert oder aktualisiert wird so , '' 'onApplicationEvent''' wird aufgerufen, wenn Ihre App bereit ist (sie wird bereitgestellt oder erneut bereitgestellt usw.). Und in diesem Moment wurden Bohnen bereits kreiert. – ThanhLoyal

0

Versuchen Protokollierungsstufe von org.springframework.beans.factory-TRACE oder DEBUG Einstellung.

Ich benutze log4j2 mit XML-Konfiguration:

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

0

können Sie ein verwenden 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; 
    } 
}