如果你想通過名稱來獲得你的服務,實現如下格局工廠:
您的服務實現:
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");
}
}
工廠接口:
public interface MyServiceFactory {
public MyService getMyServiceByName(String name);
}
工廠豆:
@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();
}
}
用法:
@Autowired
MyServiceFactory myServiceFactory;
@Override
public void run(String... strings) throws Exception {
myServiceFactory.getMyServiceByName("myService").sayHello();
myServiceFactory.getMyServiceByName("myService2").sayHello();
}
結果:
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
當你提取您'List'嘗試使用類的名字,當你重複它來獲得你想要的'Service'。 – msagala25