Несколько методов PostConstruct?

Он говорит в документации по Java для PostConstruct, которая

Только один метод может быть аннотирован с помощью этой аннотации

Но я просто попытался аннотировать три метода автономного приложения с PostConstruct. Нет ошибок компиляции, и все три из них вызываются и выполняются плавно.

Так что мне не хватает? В каком классе можно и не может существовать несколько аннотаций PostConstruct?

Ответ 1

Да, кажется, что Spring не следует этому ограничению. Я нашел код для обработки этой аннотации, которая есть InitDestroyAnnotationBeanPostProcessor, и конкретный метод:

public void invokeInitMethods(Object target, String beanName) throws Throwable {
        Collection<LifecycleElement> initMethodsToIterate =
                (this.checkedInitMethods != null ? this.checkedInitMethods : this.initMethods);
        if (!initMethodsToIterate.isEmpty()) {
            boolean debug = logger.isDebugEnabled();
            for (LifecycleElement element : initMethodsToIterate) {
                if (debug) {
                    logger.debug("Invoking init method on bean '" + beanName + "': " + element.getMethod());
                }
                element.invoke(target);
            }
        }
    }

Итак, Spring поддерживает multi PostConstruct

Ответ 2

Это, вероятно, зависит от используемой вами реализации CDI. Вы ввели объект, где у вас есть аннотации, не так ли?

Я просто попробовал его с WELD, который генерирует исключение, как ожидалось:

WELD-000805: Cannot have more than one post construct method annotated with @PostConstruct for [EnhancedAnnotatedTypeImpl] public  class Test