Что значит, по всем канонам ООП? Java весьма далека от правильного ООП подхода хотя бы потому, что там не всё есть объект. Да и в рамках самой Java есть несколько разных стилей. Надо писать не по канонам, а исходя из задачи.
1)
1,
2. Это классический MVC, с активными моделями, в которых вся бизнес-логика. При обновлении модели она оповещает все виды-слушатели. При событии во view, он вызывает оповещает контроллер, тот вызывает нужные методы модели. В вебе MVC неправильное.
2) Зачем? Ошибка многих начинающих джавистов - использование DI там, где это не нужно. В мире JavaEE DI - частое явление, потому что там бины управляемые: сервер приложений запускает приложуху в контейнере, сам регулирует контекст и время жизни бинов, может предоставлять свои реализации API и т.д. А в свинг-приложениях ничего такого нет, программа запускается через main-метод, все реализации API включаются в итоговый jar, время жизни бинов отслеживать не надо... Вполне можно обойтись простыми конфигами + фабриками/билдерами, чтобы регулировать зависимости. Хотя если очень хочется, то
вот, например.