You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Borut BolĨina <bo...@gmail.com> on 2012/01/06 15:34:23 UTC

Field versus constructor parameter injection

Hi,

I am exploring the possibilities of injecting Symbols into my service.
While this works:

public class RestEasyClientImpl implements RestEasyClient {
    private Logger logger;
    private Integer configurationServiceConnectionTimeoutMillis;
    private Integer configurationServiceSocketTimeoutMillis;

    public RestEasyClientImpl(Logger logger,
            @Symbol("configuration.service.connectionTimeoutMillis")
Integer configurationServiceConnectionTimeoutMillis,
            @Symbol("configuration.service.socketTimeoutMillis") Integer
configurationServiceSocketTimeoutMillis) {
        this.logger = logger;
        this.configurationServiceConnectionTimeoutMillis =
configurationServiceConnectionTimeoutMillis;
        this.configurationServiceSocketTimeoutMillis =
configurationServiceSocketTimeoutMillis;
...
}

this doesn't:

public class RestEasyClientImpl implements RestEasyClient {
    private Logger logger;

    @Symbol("configuration.service.connectionTimeoutMillis")
    private Integer configurationServiceConnectionTimeoutMillis;

    @Symbol("configuration.service.socketTimeoutMillis")
    private Integer configurationServiceSocketTimeoutMillis;

    public RestEasyClientImpl(Logger logger) {
        this.logger = logger;

        logger.info("configuration.service.connectionTimeoutMillis: {}",
configurationServiceConnectionTimeoutMillis);
        logger.info("configuration.service.socketTimeoutMillis: {}",
configurationServiceSocketTimeoutMillis);
...
}

Both configurationServiceConnectionTimeoutMillis and
configurationServiceSocketTimeoutMillis are null in this second case of
symbol field injection.

I would like to use the second approach becouse it is cleaner, it doesn't
clutter the method/constructor parameter list.

Is there a way of injecting symbol values into fields of the service or is
the constructor injection point my only option? Does this
http://tapestry.apache.org/defining-tapestry-ioc-services.html (Field
injection) apply for Symbols too, therefore "I am doomed"?

-borut