我正在寻找围绕Mule Flow的一个方面,IE我想定义一个@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
中的方法时,我无法打印出Before / After字符串。我在我的流程中设置了一个调试点,可以看到正在调用org.mule.transport.AbstractMessageReceiver.routeMessage(MuleMessage message)
,这是MessageReceiver
的一个实现,但我从来没有看到对Aspect的调用。
是否可以在Mule中执行此类方面?
//编辑:如上所述,我是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>
答案 0 :(得分:0)
我需要加载时编织,因此我必须为aspectjweaver和spring-instrument添加-javaagent
,并添加一个链接到我的META-INF/aop.xml
类的@Aspect
,但是要尽快当我这样做时,我被允许@Around("call(* org.mule.api.transport.MessageReceiver.routeMessage(org.mule.api.MuleMessage))")
接听骡子的电话。