2012-10-31 2 views
29

Если у вас есть родительский класс, который использует аннотацию @PostConstruct, и вы создаете дочерний класс, который вытекает из него. Будет ли автоматически вызываться метод @PostConstruct каждый раз, когда создается экземпляр дочернего класса? поскольку этот метод @PostConstruct вызывается каждый раз, когда создается экземпляр родителя.Вывод из класса с Annotation @PostConstruct

Знаю, что в классе ребенка он автоматически называет super(); без необходимости называть его.

im just not sure, если аннотация @PostConstruct автоматически вызывается, если этот дочерний класс вызывает конструктор super();.

+2

Put 'Println()' вызовы в обоих методах, запустить приложение и посмотреть, что печатается. – millimoose

+1

Как предложил @millimoose, вы можете проверить его самостоятельно и ответить на свой вопрос. Я думаю, что это будет хорошо для других в будущем. –

+1

Это может зависеть от того, что делает инъекции. Я думаю, что '@ PostConstruct' распознается как [tag: cdi], так и [tag: ejb3], а также, возможно, и другими фреймворками, и они могут иметь различное поведение. Какие рамки вы используете здесь? –

ответ

29

После тестирования этого сценария автоматически вызывается метод @PostConstruct в базовом классе WILL.

поток выглядит следующим образом:

  1. Когда создается дочерний класс, вы в конструкторе дочернего класса, то вы автоматически нагнетается в родительский класс.
  2. После завершения конструктора родительского класса вы возвращаетесь к конструктору дочернего класса.
  3. После того, как конструктор класса ребенок будет сделано, вы автоматически отправляются к родительскому классам @PostConstruct метод
+10

В моем тесте, если вы переопределяете '@ PostConstruct' супер, тогда имя ребенка вызывается первым. Если вы не переопределяете, сначала вызывается родительский. – Basil

Смежные вопросы