java - Guice - Multiple provider methods for same return types -


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