DI-контейнер
Требования
Требуется реализовать DI-контейнер для Clojure, обеспечивающий поддержку:
- внедрения зависимости по заданному протоколу (Clojure Protocol)
- конфигурации (также на Clojure), обеспечивающей:
- управление жизненным циклом объектов (достаточно реализовать singleton и
prototype в терминах Spring);
- инициализация полей для типов, объявленных через defrecord (в т.ч. другими
объектами, находящимися под управлением DI);
- пользовательской инициализации/деинициализации объектов (по аналогии с
аннотациями JavaEE @PostConstruct и @PreDestroy).
Дополнительные требования
Обеспечьте поддержку следующих возможностей:
- расширьте функциональность контейнера так чтобы поддерживалось внедрение
экземпляров Java-классов через их интерфейсы;
- распространите действие механизма на Java-код, рекомендуется поддержать
обработку стандартной аннотации javax.inject.Inject.
Рекомендации
С понятием DI рекомендуется подробнее ознакомиться здесь.
Конкретная
реализация,
которую можно рассматривать как образец.