Вызов методов beCon в PostConstruct и preDestroy в Quarkus - PullRequest
0 голосов
/ 12 февраля 2020

Вот краткий обзор проблемы:

Я хочу вызывать методы жизненного цикла бина без перезапуска приложения. Мне нужно вызвать методы-перехватчики (PostConstruct и PreDestroy) суперклассов во время перезагрузки bean-компонентов в Quarkus и CDI / Weld.

Например, у меня есть конечная точка для этого: / reload - она ​​запускает перезагрузку бина, где мне нужно go через все бины, аннотированные моей пользовательской аннотацией, и вызывает (если такая аннотация присутствует) posconstr и аннотации predestr, НО я хочу сохранить порядок вызова bean-компонента (если bean-компонент расширяет суперкласс с таким обратным вызовом жизненного цикла, я хочу сначала вызвать его).

Что я сделал, чтобы исправить это: я использовал отражение, чтобы позвонить им. Но я думаю, что это своего рода грязное исправление и надеюсь, что должно быть более мудрое решение. Существует решение с использованием CDI:

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

CDI имеет getInjectionTargetFactory в beanManager, Quarkus не поддерживает этот метод. Это работает, но я ищу решение, используя методы Quarkus.

Есть ли у Quarkus возможность вызывать методы postConstruct и preDestroy для всех компонентов без перезапуска приложения?

1 Ответ

1 голос
/ 12 февраля 2020

Вы можете использовать обычные аннотации CDI @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
    }
}

Будьте осторожны, так как они будут вызваны во время инициализации и уничтожения компонента, а не во время инициализации и уничтожения приложения, для этого есть специфика c событие, которое вы можете прослушать: https://quarkus.io/guides/lifecycle#listening -for-startup-and-shutdown-events

...