Контроль порядка запуска PicoContainer - PullRequest
3 голосов
/ 13 апреля 2010

Мне было поручено провести некоторую работу по рефакторингу того, как мы запускаем приложения. По сути, у нас есть куча консольных приложений, которые зависели от кода запуска приложения с графическим интерфейсом, вызывая поддельные зависимости, которые имеют эффект запуска, для каких библиотек нам нужно отправлять и какие зависимости должны объявляться другими модулями.

Итак, я написал простую среду запуска, в которой я просто выбрасываю кучу объектов Runnable в список, а затем запускаю их по порядку - и это работает.

Но я подумал - у нас уже есть PicoContainer в нашем проекте, поэтому все эти вещи, которые нужно запустить при запуске, потенциально могут быть брошены в PicoContainer, и если они реализуют Startable, они запустятся ...

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

Тем не менее кажется, что было бы неплохо контролировать порядок запуска PicoContainer, так что, возможно, есть какой-то другой способ?

В качестве альтернативы я мог бы просто сохранить простоту и придерживаться своего списка Runnable. В конце концов, это работает.

Ответы [ 2 ]

2 голосов
/ 05 мая 2012

Вы не можете управлять порядком запуска / остановки по умолчанию, но, безусловно, вы можете заказать собственный жизненный цикл.

пример:

1) сделать ваш интерфейс MyStartable имеющим методы init () и расширением Comparable.

2) добавить контейнерный компонент MyStart, инициализированный списком или массивом MyStartable.

3) запустить MyStart вручную или со стандартным жизненным циклом запуска / остановки

4) в MyStart просто отсортируйте список / массив в соответствии с естественным порядком, который вы должны переопределить.

5) вызывать init () на каждом MyStartable

Полагаю, есть более "родной" способ сделать это через менеджеров жизненного цикла, но нужно изучить источники.

0 голосов
/ 04 ноября 2010

Как ваши компоненты в настоящее время записывают в журнал? Я ожидал бы, что будет (picocontainer) зависимость от журнала, и тогда конструктор для этого журнала напишет заголовок. Если ведение журнала не внедрено и полностью обходит PicoContainer, я бы не включил в него только часть заголовка, я бы оставил это отдельно, как и остальная часть ведения журнала.

...