2017-09-01 69 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; 
    } 
}