【发布时间】:2023-03-21 12:07:01
【问题描述】:
我有一个使用 Spring Boot 的 javafx 应用程序。我想在初始屏幕上显示正在加载的 bean。
如何拦截 bean 加载以便获取它的名称?
之前有人指出,这里已经回答了: Print all the Spring beans that are loaded
但我想知道正在加载哪个 bean,而不是已经加载的 bean。
【问题讨论】:
标签: spring-boot
我有一个使用 Spring Boot 的 javafx 应用程序。我想在初始屏幕上显示正在加载的 bean。
如何拦截 bean 加载以便获取它的名称?
之前有人指出,这里已经回答了: Print all the Spring beans that are loaded
但我想知道正在加载哪个 bean,而不是已经加载的 bean。
【问题讨论】:
标签: spring-boot
您可以为此使用BeanPostProcessor。初始化前后的任何 bean 都会被通知:
public class PrintingBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("Before init: " + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("After init: " + beanName);
return bean;
}
}
要注册它,我只需在我的配置类中执行以下操作:
@Bean
public BeanPostProcessor postProcessor() {
return new PrintingBeanPostProcessor();
}
然后在启动时打印:
Before init: resourceHandlerMapping
After init: resourceHandlerMapping
Before init: defaultServletHandlerMapping
After init: defaultServletHandlerMapping
Before init: mvcUriComponentsContributor
After init: mvcUriComponentsContributor
Before init: httpRequestHandlerAdapter
After init: httpRequestHandlerAdapter
(这显然只是打印内容的一小部分)
希望对你有帮助,
阿图尔
【讨论】: