记录spring Bean实例化

时间:2017-09-01 08:46:13

标签: java spring

我们如何在Spring中记录每个bean实例化?

  • 我希望每次初始化bean时都记录一条消息。
  • 我有N个bean,我不想在每个bean的init方法上放置任何记录器。
  • 我认为这是一个贯穿各领域的问题,但不确定如何实现这一目标。

有办法吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用Spring的事件监听器(解释here)来监听事件。我相信您需要倾听的事件是ContextRefreshedEvent,例如:

@Component
public class MyListener 
        implements ApplicationListener<ContextRefreshedEvent> {

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

答案 2 :(得分:0)

尝试将org.springframework.beans.factory的日志记录级别设置为TRACEDEBUG

我使用log4j2和xml配置:

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