【问题标题】:How do I intercept spring boot bean loading at startup?如何在启动时拦截 Spring Boot bean 加载?
【发布时间】:2023-03-21 12:07:01
【问题描述】:

我有一个使用 Spring Boot 的 javafx 应用程序。我想在初始屏幕上显示正在加载的 bean。

如何拦截 bean 加载以便获取它的名称?

之前有人指出,这里已经回答了: Print all the Spring beans that are loaded

但我想知道正在加载哪个 bean,而不是已经加载的 bean。

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    您可以为此使用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
    

    (这显然只是打印内容的一小部分)

    希望对你有帮助,

    阿图尔

    【讨论】:

    • 这就是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 2019-02-10
    • 1970-01-01
    • 2020-01-21
    • 2021-03-27
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多