具體參考我的gitee:springboot-Dubbo-spi
com.dubbo.spi.demo.service.SPIService:
spiserviceimpl=com.dubbo.spi.demo.service.SPIServiceImpl
spiserviceimpl2=com.dubbo.spi.demo.service.SPIServiceImpl2
controller:
@RestController
@RequestMapping(value = "/SPI")
public class SPIController {
@RequestMapping(value="/querySPI/{orgId}",method=RequestMethod.GET)
public List<Orgization> querySPI(@PathVariable(value = "orgId") Integer orgId) {
List<Orgization> list = new ArrayList<>(2);
ExtensionLoader<SPIService> extensionLoader = ExtensionLoader.getExtensionLoader(SPIService.class);
SPIService spiserviceimpl = extensionLoader.getExtension("spiserviceimpl");
Orgization byId = spiserviceimpl.findById(orgId);
SPIService spiserviceimpl2 = extensionLoader.getExtension("spiserviceimpl2");
Orgization byId2 = spiserviceimpl2.findById(orgId);
list.add(byId);
list.add(byId2);
return list;
}
}
SPIService:
@SPI("dubbo") //dubbo 即 METF-INF.dubbo 中的dubbo
public interface SPIService {
Orgization findById(Integer orgId);
}
SPIServiceImpl :
@Service
public class SPIServiceImpl implements SPIService{
@Autowired
private SPIDao spiDao;
private static SPIServiceImpl spiServiceimpl;
@PostConstruct
public void init() {
spiServiceimpl = this;
spiServiceimpl.spiDao = this.spiDao;
}
@Override
public Orgization findById(Integer orgId) {
Orgization one = spiServiceimpl.spiDao.findOne(orgId);
System.out.println("SPIServiceImpl 的輸出爲:"+one);
return one;
}
}
SPIServiceImpl2:
@Service
public class SPIServiceImpl2 implements SPIService{
@Autowired
private SPIDao spiDao2;
private static SPIServiceImpl2 spiServiceimpl2;
@PostConstruct
public void init() {
spiServiceimpl2 = this;
spiServiceimpl2.spiDao2 = this.spiDao2;
}
@Override
public Orgization findById(Integer orgId) {
Orgization one = spiServiceimpl2.spiDao2.findOne(orgId);
System.out.println("SPIServiceImpl2 的輸出爲:"+one);
return one;
}
}
SPIDao :
public interface SPIDao extends CrudRepository<Orgization,Integer> {
}