Solon v3.5.2

dami - 与 IOC 容器集成

</> markdown

引处以 solon 集成为例

1、bus 集成示例

调用事件监听器

//监听器1,使用 CallEventListener(更简洁。只适合处理 call 事件)
@DamiTopic("user.demo")
public static class UserEventListener implements CallEventListener<String, String> {
    @Override
    public void onCall(Event<CallPayload<String, String>> event, String data, CompletableFuture<String> sink) {
        sink.complete("Hi " + data);
    }
}

//监听器2,使用 EventListener(更通用。适用任何场景,内部可根据类型检测识别)
@DamiTopic("user.demo")
public static class UserEventListener2 implements EventListener {
    @Override
    public void onEvent(Event event) throws Throwable {
        if(event.getPayload() instanceof CallPayload) {
            CallPayload<String, String> payload = (CallPayload<String, String>) event.getPayload();
            payload.getSink().complete("Hi " + payload.getData());
        }
    }
}

事件发送测试

@SolonTest
public class Demo81 {
    @Test
    public void main() throws Throwable {
        System.out.println(Dami.bus().call("user.demo", "solon").get());
    }
}

2、lpc 集成示例

服务消费者(以 Event 开头,方便理解为是由事件驱动的)

@DamiTopic("event.user")
public interface EventUserService {
    User getUser(long userId); //方法的主题 = topicMapping + "." + method.getName() //方法不能重名
}

服务提供者

//通过约定保持与 EventUserService 相同的接口定义(或者实现 EventUserService 接口,这个会带来依赖关系)
@DamiTopic("event.user")
public class EventUserServiceListener { // implements EventUserService // 它相当于是个实现类
    public User getUser(long userId) {
        return new User(userId);
    }
}

集成测试

@SolonTest
public class Demo81 {
    @Inject
    EventUserService eventUserService;

    @Test
    public void main(){
        User user = eventUserService.getUser(99);
        assert user.getUserId() == 99;
    }
}