企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 送信器拦截 > 核心版本`1.6.0`增加。 送信器拦截可以使用户对MsgSender中的`SENDER`、`SETTER`、`GETTER`进行拦截成为了可能。依靠JDK的动态代理机制,我提供了三个接口来针对上述三个送信器进行拦截。 怕你们忘了,再提醒一下,以下拦截器均需要标注`@Beans`注解。 <br> ## 拦截器接口 | 送信器 | 对应拦截器接口 | 对应上下文对象 | | --- | --- | --- | | `SENDER` | `SenderSendIntercept` | SendContext | | `SETTER` | `SenderSetIntercept ` | SetContext | | `GETTER` | `SenderGetIntercept ` | GetContext | ## 接口定义 三个接口中,均存在**一个**需要实现的抽象方法: ```java /** * 拦截执行函数 * @param context 上下文对象 * @return 是否放行 */ boolean intercept(? extends SenderContext context); ``` 实现此方法以决定是否方法此次执行。 <br> ## 上下文定义 三个上下文对象均继承了`SenderContext`抽象类,此抽象类所提供的API如下: ```java /** * 获取对应的送信器 */ ? extends SenderList getValue(); /** * 同上 */ ? exteds SenderList getSender(); /** * 获取API执行的参数。即sender被执行的参数,数组的修改会影响方法的真实参数。 */ Object[] getParams(); /** * 重新设置参数。 */ void setParams(Object[] params); ``` 除了如上定义以外,三个上下文对象还存在一个各自对应的送信器对象的**公共常量**字段,例如: ```java public boolean intercept(GetContext context) { // 此处,是拦截GETTER的消息获取送信器,而GETTER对应的上下文对象可以直接使用.GETTER的方式使用送信器 LoginQQInfo info = context.GETTER.getLoginQQInfo(); System.out.println("intercept: " + info); } ``` ※ 注意:在拦截器中使用送信器不会被二次拦截。 <br> ## 注意事项 由于三个拦截器接口使用的是同一个父类接口,因此这三个接口**无法**同时使用在同一个类上。