4

我正在寻找一个围绕 Mule 流的方面,即我想定义一个@Around当有东西进入 Mule 流时将被触发的方面,以便我可以执行自己的统计数据收集。我还没有找到一个简单的“Flow”类来包装,但我已经看到这MessageReceiver是一个很好的类,或者至少是这个类的实现。

但是我不是 AspectJ 方面的专家,我无法让它发挥作用。我的@Aspect班级有一个看起来像这样的方法。

@Around("execution(public * org.mule.api.transport.MessageReceiver+.*(..))")
public Object addMonitor(ProceedingJoinPoint pjp) throws Throwable {
    System.out.println("Before");
    Object object = pjp.proceed();
    System.out.println("After");
    return object;
}

但是当调用方法时,我无法打印出之前/之后的字符串HttpMessageReceiver。我已经在我的流程中设置了一个调试点,并且可以看到它org.mule.transport.AbstractMessageReceiver.routeMessage(MuleMessage message)正在被调用,这是一个实现,MessageReceiver但我从未看到对我的 Aspect 的调用。

有可能在 Mule 中执行这种 Aspect 吗?

//编辑:如前所述,我是 AspectJ 和 AOP 的新手,所以我会说我在 Mule 中使用 spring 来处理我的@Aspect课程。我有使用 Spring 处理的 bean 的示例,但不适用于不受 Spring 管理的常规 POJO。我的 Spring 配置如下所示:

<spring:beans>
    <context:component-scan base-package="com.example" />
    <context:annotation-config />
    <aop:aspectj-autoproxy />
</spring:beans>
4

1 回答 1

0

我需要加载时间编织,所以我必须添加-javaagentaspectjweaver 和 spring-instrument,并添加一个META-INF/aop.xml链接到我的@Aspect类的 which,但是一旦我这样做了,我就可以@Around("call(* org.mule.api.transport.MessageReceiver.routeMessage(org.mule.api.MuleMessage))")得到 Mule 的调用。

于 2013-04-11T15:30:43.413 回答