dami - 与 IOC 容器集成
此处以 solon 集成为例
1、引入 IOC 框架适配包
<dependency>
<groupId>org.noear</groupId>
<artifactId>dami2-solon-plugin</artifactId> <!-- 或 springboot-solon-plugin -->
<version>2.0.0-M3</version>
</dependency>
下面以 dami2-solon-plugin
使用为例。
2、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());
}
}
3、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;
}
}