4.5.1.3.5. Controller Dependency Injection
Dependency Injection in controllers can be used to acquire references to utilized objects. For this purpose it is required to declare either a field of the corresponding type or a write access method (setter) with an appropriate parameter type and with one of the following annotations:
-
@Inject
– the simplest option, where an object for injection will be found according to the field/method type and the name of the field or attribute corresponding to the method according to JavaBeans rules. -
@Named("someName")
– explicitly defines the name of the target object.
The following objects can be injected into controllers:
-
This screen’s visual components defined in the XML-descriptor. If the attribute type is derived from
Component
, the system will search for a component with the corresponding name within the current screen. -
Actions defined in the XML-descriptor – see Actions. The Action Interface.
-
Datasources defined in the XML-descriptor. If the attribute type is derived from
Datasource
, the system will search for a datasource with the corresponding name in the current screen. -
UserSession
. If the attribute type is UserSession, the system will inject an object of the current user session. -
DsContext
. If the attribute type isDsContext
, the system will inject theDsContext
of the current screen. -
WindowContext
. If the attribute type isWindowContext
, the system will inject theWindowContext
of the current screen. -
DataSupplier
. If the attribute type is DataSupplier, the corresponding instance will be injected. -
Any bean defined in the context of a given client block, including:
-
Middleware services imported by Client
-
ComponentsFactory
-
WindowConfig
-
ExportDisplay
-
-
If nothing of the mentioned above is appropriate and the controller has companions, a companion for the current client type will be injected, if the types match.
It is possible to inject the parameters passed in the map to the
init()
method into the controller using special annotation@WindowParam
. The annotation has aname
attribute which contains the parameter name (a key in the map) and an optional required attribute. Ifrequired = true
and the map does not contain the corresponding parameter aWARNING
message is added to the log.An example of an injection of a Job-type object passed to the controller’sinit()
method:@WindowParam(name = "job", required = true) protected Job job;