1、java spi实际上就是首先在META-INF/services/文件下获取到一个与java服务包名相同的一个路径,这个路径其实指定的是某一个接口的实现类,通过获取到这个路径以后,就可以通过classForName等方式来获取到实现类。但是不提供IOC,AOP功能,而且也不提供实现类的选择。
2、Dubbo的SPI机制,除了提供基本java spi功能以外,还提供IOC,AOP机制,但跟Spring的ioc,aop是有所不同的。
IOC实现方式:对于需要依赖注入的类,由于我们注入的时候,可能注入的是一个接口,那么我们怎么知道是对应哪个实现类呢? 这个时候Dubbo会去帮我们获取到META-INF/services/配置中配置的实现类路径,然后去动态生成这个实现类,这个实现类可以理解成一个代理对象,所以当我们在使用原来依赖注入的类的时候,就会去调用实现类这个代理对象里面的方法,这样就实现了IOC的功能。