5.5.1.3.6. Инжекция зависимостей контроллеров
В контроллерах можно использовать Dependency Injection для получения ссылок на используемые объекты. Для этого нужно объявить либо поле соответствующего типа, либо метод доступа на запись (setter) с соответствующим типом результата, и добавить ему одну из следующих аннотаций:
-
@Inject
- простейший вариант, поиск объекта для инжекции будет произведен по типу поля/метода и по имени, эквивалентному имени поля либо имени атрибута (по правилам JavaBeans) для метода -
@Named("someName")
- вариант с явным указанием имени искомого объекта
Инжектировать в контроллеры можно следующие объекты:
-
Визуальные компоненты данного экрана, определенные в XML-дескрипторе. Если тип атрибута унаследован от
Component
, в текущем экране будет произведен поиск компонента с соответствующим именем. -
Действия, определенные в XML-дескрипторе - см. Действия. Интерфейс Action
-
Источники данных, определенные в XML-дескрипторе. Если тип атрибута унаследован от
Datasource
, в текущем экране будет произведен поиск источника данных с соответствующим именем. -
UserSession
. Если тип атрибута - UserSession, будет инжектирован объект текущей пользовательской сессии. -
DsContext
. Если тип атрибута -DsContext
, будет инжектированDsContext
текущего экрана. -
WindowContext
. Если тип атрибута -WindowContext
, будет инжектированWindowContext
текущего экрана. -
DataSupplier
. Если тип атрибута - DataSupplier, будет инжектирован соответствующий экземпляр. -
Любой бин, определенный в контексте данного клиентского блока приложения, в том числе:
-
импортируемые клиентом сервисы Middleware
-
ComponentsFactory
-
WindowConfig
-
ExportDisplay
-
-
Если ничего из вышеперечисленного не подошло и контроллер имеет компаньонов, в случае совпадения типов будет инжектирован компаньон для текущего типа клиента.
С помощью специальной аннотации @WindowParam
можно инжектировать в контроллер параметры, передаваемые в мэп метода init()
. Аннотация имеет атрибут name
, в котором указывается имя параметра (ключ в мэп), и опциональный атрибут required
. Если required = true
, то при отсутствии в мэп соответствующего параметра в лог выводится сообщение с уровнем WARNING
.
Пример инжекции объекта типа Job
, передаваемого в метод init()
контроллера:
@WindowParam(name = "job", required = true)
protected Job job;