dami - 与 IOC 容器集成
引处以 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;
}
}