# pap-spring-boot-spi-demo **Repository Path**: alexgaoyh/pap-spring-boot-spi-demo ## Basic Information - **Project Name**: pap-spring-boot-spi-demo - **Description**: Spring Boot SPI 的示例代码。解决类似 Saas 平台不同租户的业务需求不一致的情况,在这种情况下,则可以考虑使用 SPI 来支持定制化的服务。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 3 - **Created**: 2019-06-21 - **Last Updated**: 2023-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #20190621 Saas 平台在设计的过程中,会出现不同租户的业务需求不一致的情况,在这种情况下,则可以考虑使用 SPI 来支持定制化的服务 本例定义基础的 ISPIInterface 接口类,所有牵扯到 SPI 扩展的地方,业务接口(IItemPrice)都继承此接口类 本例定义基础的 SPIInterfaceFactoryBean 类,在具体的调用执行时,根据传入的第一个参数作为条件进行匹配,执行后返回对应的结果; 增加Bean 定义,将 SPIInterfaceFactoryBean 纳入 Spring Bean 容器中; /** * 定义 FactoryBean * @param applicationContext * @return */ @Bean public SPIInterfaceFactoryBean spiInterfaceFactoryBean(ApplicationContext applicationContext) { return new SPIInterfaceFactoryBean(applicationContext, IItemPrice.class); } /** * 代理类 * @param spiInterfaceFactoryBean * @return * @throws Exception */ @Bean public IItemPrice itemPriceProxy(SPIInterfaceFactoryBean spiInterfaceFactoryBean) throws Exception { return (IItemPrice) spiInterfaceFactoryBean.getObject(); } 具体的业务使用,详见 Demo 包下的类文件。 定义不同商品的价格实现类,根据传入的参数是 apple 还是 banana, 返回不同的参数; 在 Saas 平台设计的过程中,如果遇到定制化的业务需求的话,则可以实现不同的接口,根据不同的业务场景进行不同的判断。 1、可以在方法实现上增加注解,走不通的判断; 2、可以在 conditionVerify 方法上进行判断,满足不同的条件进行调整, 当前示例是判断入参 LoginedUserVO 的参数,根据不同的租户进行不同的业务逻辑处理;