Мне было поручено провести некоторую работу по рефакторингу того, как мы запускаем приложения. По сути, у нас есть куча консольных приложений, которые зависели от кода запуска приложения с графическим интерфейсом, вызывая поддельные зависимости, которые имеют эффект запуска, для каких библиотек нам нужно отправлять и какие зависимости должны объявляться другими модулями.
Итак, я написал простую среду запуска, в которой я просто выбрасываю кучу объектов Runnable в список, а затем запускаю их по порядку - и это работает.
Но я подумал - у нас уже есть PicoContainer в нашем проекте, поэтому все эти вещи, которые нужно запустить при запуске, потенциально могут быть брошены в PicoContainer, и если они реализуют Startable, они запустятся ...
Но в некоторых случаях мы хотим указать порядок между ними. Например, я не хочу, чтобы какой-либо другой компонент записывал в журнал, прежде чем мы запишем в журнал заголовок, указывающий, что приложение запускается. Я знаю, что могу ввести упорядочение путем введения зависимостей внедрения, но в этом случае это похоже на хак - мне нужно было бы добавить средство записи заголовка журнала в качестве зависимости для каждого другого компонента, который может записывать в журнал, что не очень хорошо для все.
Тем не менее кажется, что было бы неплохо контролировать порядок запуска PicoContainer, так что, возможно, есть какой-то другой способ?
В качестве альтернативы я мог бы просто сохранить простоту и придерживаться своего списка Runnable. В конце концов, это работает.