此处以 solon 集成为例



### 1、引入 IOC 框架适配包

```xml
<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 集成示例

调用事件监听器

```java
//监听器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());
        }
    }
}
```

事件发送测试

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


### 3、lpc 集成示例

服务消费者（以 Event 开头，方便理解为是由事件驱动的）

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

服务提供者

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

集成测试

```java
@SolonTest
public class Demo81 {
    @Inject
    EventUserService eventUserService;

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