java - Get a List of Beans for a certain type -


i have type of class can provide data , registry different data providers registered. looking elegant way implement in spring boot. current implementation looks (code shortened brevity):

public interface dataprovider{     data getsomedata(); }  public class registry{     public register(dataprovider provider){        //add internal list     };      public list<dataprovider> getproviders(){        //return providers     }      public data someaggregatedoperation(){ ... } }  public class provider1 implements dataprovider { ... }  public class provider2 implements dataprovider { ... } 

now wiring part, , part want change more elegant:

@configuration public class myappconfiguration{     @bean      public registry providerregistry(){         registry reg = new registry();         reg.register(new provider1());         reg.register(new provider2());         return reg;     } } 

then can inject registry other classes need operate on services.

i know di providing different implementation single type 1 @ time. di not right tool, question more spring if there's way don't know achieve this. example annotate them qualifier , resolve beans qualifier in registry.

the way not want take using custom annotation , resolving classes via reflection, instantiate them , put them in registry. @ moment it's way can see don't have modify config , handwire services.

if want of them autowired, can autowire list of interface implementations.

@bean public class provider1 implements dataprovider { ... }  @bean public class provider2 implements dataprovider { ... }  @bean public class registry{     @autowired     private list<dataprovider> providers;      public list<dataprovider> getproviders(){        //return providers     }      public data someaggregatedoperation(){ ... } } 

in case want keep using configuration class like:

@bean public class provider1 implements dataprovider { ... }  @bean public class provider2 implements dataprovider { ... }  public class registry{     private list<dataprovider> providers;      public registry(final list<dataprovider> providers) {       this.providers = providers;     }      public list<dataprovider> getproviders(){        //return providers     }      public data someaggregatedoperation(){ ... } }  @configuration public class myappconfiguration{      @bean     @autowired     public registry providerregistry(final list<dataprovider> providers){         return new registry(providers);     } } 

Comments

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -