微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Micronaut 注册和运行单个接口的所有实现?

如何解决如何使用 Micronaut 注册和运行单个接口的所有实现?

假设我有一个简单的界面:

public interface Event {
    void execute(SomeClient client);
}

我有 5 个类实现了这个接口,例如:

public class FirstEvent implements Event {
    @Override
    public void execute(SomeClient client) {
        //do varIoUs things here
        client.registerEvent(someData)
    }

我想要实现的是在应用程序启动期间运行 execute(SomeClient client) 接口的所有 5 个实现的 Event 方法

我已经有了启动我需要的所有事件的代码,但我想将这些事件分成多个类,并有一个单点执行这些事件。我想创建一个 Event 接口,并制作多个带有 Micronauts @Singleton 注释的实现,这样我就可以简单地将它们全部注册,而不必将它们一一添加到当前正在执行它们的类中一个

这个接口解决方案是一个好的决定吗?有没有更好的方法来做到这一点?实现我想要的最佳方法是什么(使用单个方法运行所有类而不是一个一个地运行它们)?

解决方法

这个界面解决方案是一个好的决定吗?

是的。

有没有更好的方法来做到这一点?

一般来说,没有。

实现我想要的最佳方式是什么(运行所有课程 用一个方法而不是一个一个地运行它们)?

没有客观上“最佳”的方法,因为您可以使用不同的技术针对不同的目标进行优化。一种选择是您可以将所有 Event bean 注入到将对所有这些 bean 调用 execute 方法的东西中。

@Singleton
public class SomeBean {
    private List<Event> events;

    public SomeBean(List<Event> events) {
        this.events = events;
    }

    // In this class you have all of the `Event`.
    // it is not clear from the question where the
    // SomeClient instance comes from,but once
    // you have that you could iterate over all
    // of the events and pass the client to the
    // execute method on each Event.
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。