Si vous voulez obtenir vos services par nom, mettre en œuvre l'usine de modèle comme ci-dessous:
Vos implémentations de service:
public interface MyService {
void sayHello();
}
public class DefaultService implements MyService {
private static Logger log = LoggerFactory.getLogger(DefaultService.class);
@Override
public void sayHello() {
log.info("Hello from DefaultService");
}
}
public class DefaultService2 implements MyService {
private static Logger log = LoggerFactory.getLogger(DefaultService2.class);
@Override
public void sayHello() {
log.info("Hello from DefaultService2");
}
}
L'interface d'usine:
public interface MyServiceFactory {
public MyService getMyServiceByName(String name);
}
Les haricots usine :
@Configuration
public class MyServiceFactoryBean {
@Bean
public FactoryBean serviceLocatorFactoryBean(){
ServiceLocatorFactoryBean factoryBean = new ServiceLocatorFactoryBean();
factoryBean.setServiceLocatorInterface(MyServiceFactory.class);
return factoryBean;
}
@Bean("myService")
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public DefaultService defaultService(){
return new DefaultService();
}
@Bean("myService2")
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public DefaultService2 defaultService2(){
return new DefaultService2();
}
}
Utilisation:
@Autowired
MyServiceFactory myServiceFactory;
@Override
public void run(String... strings) throws Exception {
myServiceFactory.getMyServiceByName("myService").sayHello();
myServiceFactory.getMyServiceByName("myService2").sayHello();
}
Résultats:
2017-08-11 11:32:31.126 INFO 12827 --- [ restartedMain] c.m.test.DefaultService : Hello from DefaultService
2017-08-11 11:32:31.129 INFO 12827 --- [ restartedMain] c.m.test.DefaultService2 : Hello from DefaultService2
lorsque vous extrayez votre 'list' essayer d'obtenir votre en utilisant le nom de la classe' Service' désirée lorsque vous itérer il. – msagala25