3.6.1.3.6. Controller Dependency Injection
This is a legacy API. For the new API available since v.7.0, see Screen Controllers. |
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.
-
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
-
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 parameters passed in a map to the init()
method into the controller using @WindowParam
annotation. The annotation has the name
attribute which contains the parameter name (a key in the map) and an optional required attribute. If required = true
and the map does not contain the corresponding parameter a WARNING
message is added to the log.
An example of the injection of a Job
entity passed to the controller’s init()
method:
@WindowParam(name = "job", required = true)
protected Job job;