Quarkus中对Bean的后置构造和预销毁方法的调用 [英] Calling of postConstruct and preDestroy methods of beans in Quarkus

查看:0
本文介绍了Quarkus中对Bean的后置构造和预销毁方法的调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是一个问题的简要概述:

我希望在不重新启动应用程序的情况下调用Bean生命周期方法。 在Quarkus和CDI/Weld中重新加载Bean时,我需要调用超类的拦截器方法(PostConstruct和PreDestroy)。

例如,我对此有一个终结点:/reLoad-它触发Bean重新加载,其中我需要遍历使用我的定制批注注释的所有Bean,并调用(如果存在这样的批注)posconr和preestr批注,但我希望保留Bean调用顺序(如果Bean扩展了具有此类生命周期回调的超类,则我希望首先调用它)。

我如何修复它:我使用反射来调用它们。但我认为这是一种肮脏的解决方案,希望应该有一个更明智的解决方案。有一个使用CDI的解决方案:

beanManager.getInjectionTargetFactory(
            beanManager.createAnnotatedType(instance.getClass())).createInjectionTarget(
            bean).postConstruct(instance)

CDI在beanManager中有getInjectionTargetFactory,Quarkus不支持此方法。 它可以工作,但我使用Quarkus方法搜索解决方案。

Quarkus是否可以在不重新启动应用程序的情况下调用所有Bean的postConstruct和preDestroy方法?

cdi

您可以在Bean上使用常规推荐答案注释@PostConstruct@PreDestroy。Quarkus将尊重他们。

例如:

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class MyBean {
    @PostConstruct
    void init() {
        // do something
    }

    @PreDestroy
    void destroy() {
        // do something
    }
}

请注意,它们将在Bean初始化和销毁时调用,而不是在应用程序初始化和销毁时调用,因此您可以监听特定的事件:https://quarkus.io/guides/lifecycle#listening-for-startup-and-shutdown-events

这篇关于Quarkus中对Bean的后置构造和预销毁方法的调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆