2013-08-07 3 views
0

В одном из наших компонентов мы читаем некоторые данные на основе файлов в памяти.Используйте ApplicationContextListener или @PostConstruct для

Было бы лучше сделать это из ApplicationContextListener, например. вызвав метод beans init() или просто добавив @PostConstruct к этому методу init(), чтобы контейнер сделал это автоматически?

ответ

0

Вы можете использовать:
1. @PostConstruct
2. InitializingBean интерфейс
3. <bean class="your bean class" init-method="your init method"/>

Атрибут: INIT-метод: Имя метода пользовательской инициализации для вызова после установки боба свойства. Метод не должен иметь никаких аргументов, , но может вызвать любое исключение. Это альтернатива , реализующая интерфейс InitializingBean Spring или маркирование метода с помощью аннотации PostConstruct.

Это альтернатива: если ваша программа полностью аннотируется, отправьте аннотацию, если XML идет на XML (мне не нравится смешивание, и вам не нужно спрашивать себя, реализуете ли вы функцию с аннотом или xml)

EDIT:

  • слушатель контекста: будет вызываться каждый контекст обновления (как правило, один раз, при запуске)
  • InitializingBean или @PostConstruct: Нанести на жизненном цикле бина называется каждый раз, когда компонент создается (зависит от сфера)

В вашем случае с использованием контекста слушателя:

  1. вызова Init() ожидает, пока инициализации компонента() завершения, но вы уверены, в какое время контейнерной жизненного цикла она называется.
  2. Вы потеряли возможность ленивой инициализации,
  3. но получить возможность оправиться от ошибки (возможно, принимая на работу без данных в памяти)

С InitializingBean вы:

  1. есть (иначе каждый раз, когда вы подключаете bean-компонент, вызывается метод init()),
  2. вы потеряли возможность восстановления в случае сбоя, так как цикл инициализации bean не в ваших руках (или будет более трудно восстановить)
  3. Вы получаете возможность ленивых инициализаций (время запуска уменьшается)

В вашем случае, если вы используете одноплодный боб без lazy- init и не нуждаются в восстановлении ошибок в случае отказа, нет различий вообще

+0

Привет @bellabax, спасибо за ваш ответ. Я понимаю, что эти формы, которые вы упомянули, могут использоваться для инициализации инициализирующего компонента.Однако мой вопрос связан скорее с различием архитектуры между использованием InitiaizingBean или ApplicationContextListener для этого. –

+0

Отредактировал мой ответ, потому что писать редактировать в комментариях нечитаемый текст –

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