基于 Spring-Plugin 插件化开发
Spring Plugin 是一个允许你为 Spring 应用程序定义插件接口并在运行时动态加载插件实现的库。仓库地址(https://github.com/spring-projects/spring-plugin) 以下介绍集成步骤
添加 maven 依赖
xml
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
定义 PayServicePlugin 继承 Plugin 接口
java
public interface PayServicePlugin extends Plugin<PayContext> {
void pay();
}
PayContext 上下文
java
@Data
public class PayContext{
private String name;
private long price;
}
实现 PayServicePlugin 接口
java
@Component
public class AlipayServicePlugin implements PayServicePlugin {
@Override
public void pay() {
System.out.println("阿里支付");
}
@Override
public boolean supports(PayContext context) {
return context.getName().equals("ali");
}
}
@Component
public class WxpayServicePlugin implements PayServicePlugin {
@Override
public void pay() {
System.out.println("微信支付");
}
@Override
public boolean supports(PayContext context) {
return context.getName().equals("wx");
}
}
supports 方法是 Plugin 接口提供的,用于寻找执行类
测试
java
@Autowired
private PluginRegistry<PayServicePlugin,PayContext> pluginRegistry;
@Test
public void test() {
PayContext payContext = new PayContext();
payContext.setPrice(10l);
payContext.setName("ali");
Optional<PayServicePlugin> plugin = pluginRegistry.getPluginFor(payContext);
plugin.orElseThrow(() -> new IllegalArgumentException("Not Support Pay Type"))
.pay();
}
可以看到传入不同的 name 就可以动态切换支付方式