解锁新技能《Spring Plugin插件系统》

文章介绍了SpringPlugin插件系统的使用,它通过提供Plugin接口和@EnablePluginRegistries注解实现模块化扩展。文中展示了如何定义和实现插件,以及在控制器中注入并使用这些插件的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平时工作过程中很少使用Spring Plugin插件,最近因为在学习springfox源码的过程中发现有大量用到,先来学习下插件的使用方法。

GitHub地址:https://github.com/spring-projects/spring-plugin

截止20230426日,GitHub的Star为403,fork数为107.

官方说Spring Plugin是世界上最小规模的插件系统,果然名不虚产,用户数够小。

Spring Plugin通过提供扩展核心系统功能的插件实现核心的灵活性,可以满足我们对模块化可扩展程序的需要。

示例程序

Spring Plugin提供了一个标准的Plugin<S>接口供开发人员声明自己的插件的机制,然后通过@EnablePluginRegistries注解注入到Spring
IOC容器,Spring容器会为我们自动匹配到插件的所有实现子对象,最终我们的代码在使用时通过注入PluginRegistry<T extends
Plugin<S>,S>对象拿到插件实例进行操作。

Plugin<S>接口声明一个实现,标注该插件是否支持,因为可能会有多个接口的实现:

public interface PeoplePlugin extends Plugin<PeoplePluginType> {
    String eat();
}

定义一个黄种人插件实现类:

@Service
public class YellowPeoplePluginImpl implements PeoplePlugin {
    @Override
    public String eat() {
        return "馒头、大米";
    }

    @Override
    public boolean supports(PeoplePluginType peopleType) {
        return PeoplePluginType.YELLOW.equals(peopleType);
    }
}

定义一个白种人插件实现类:

@Service
public class WhitePeoplePluginImpl implements PeoplePlugin {
    @Override
    public String eat() {
        return "面包";
    }

    @Override
    public boolean supports(PeoplePluginType peopleType) {
        return PeoplePluginType.WHITE.equals(peopleType);
    }
}

定义一个控制器类,通过@EnablePluginRegistries注解将PeoplePlugin插件及其实现类注入到IOC容器中:

@EnablePluginRegistries(value = PeoplePlugin.class)
@RestController
@RequestMapping("api/plugin")
public class PluginController {
    @Autowired
    private PluginRegistry<PeoplePlugin, PeoplePluginType> pluginRegistry;

    @GetMapping("eat")
    public void eat() {
        List<PeoplePlugin> list = pluginRegistry.getPlugins();
        for (PeoplePlugin people : list) {
            String s = people.eat();
            System.out.println(s);
        }
    }
}

GitHub地址:https://github.com/mingyang66/spring-parent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值