in module:
@provides @singleton public executorservice provideexecutorservice(){ return new executorservice(config); } in class:
@inject private executorservice executorservice; now, need 2 instances of executorservice different config:
@provides @singleton public executorservice provideexecutorservicea(){ return new executorservice(configa); } @provides @singleton public executorservice provideexecutorserviceb(){ return new executorservice(configb); } if want inject executorservice 1 created configb in class, how do it?
you can use binding annotations :
@provides @singleton @priority(priority.level.high) public static reportingdal createhighpriorityreportingdal(datasource datasource, databasetype databasetype, reportingquerygenerator querygenerator) { return new reportingdalimpl(datasource, databasetype, queue.default, querygenerator); } @provides @singleton @priority(priority.level.low) public static reportingdal createlowpriorityreportingdal(datasource datasource, databasetype databasetype, reportingquerygenerator querygenerator) { return new reportingdalimpl(datasource, databasetype, queue.maintenance, querygenerator); } the @priority annotation looks :
@retention(retentionpolicy.runtime) @target({ elementtype.field, elementtype.parameter, elementtype.method }) @bindingannotation public @interface priority { level value(); public enum level { low, high } } note if don't want implement custom annotation, wou can use @named annotation built-in guice. can use in classes :
@inject public reportingjob(@priority(priority.level.low) reportingdal dal) { this.dal = dal; } edit
or, if injecting via private field :
@inject @priority(priority.level.low) private reportingdal dal;
Comments
Post a Comment