我们如何在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