我为调用 javax.jms.MessageProducer.send(..) 创建了以下切入点:
pointcut callJmsSend(Message message):
(call(void javax.jms.MessageProducer.send(javax.jms.Message)))
&& args(message);
效果很好。对于这个切入点,我有一个之前和之后的建议,它(除其他外)读取 JmsDestination 属性。
before(Message message): callJmsSend(message) {
// null pointer exception
String queueName = message.getJMSDestination().toString();
}
after(Message message): callJmsSend(message) {
// works
String queueName = message.getJMSDestination().toString();
}
阅读 getDestination() 的 JavaDoc 后发现该属性是在调用 send() 之后设置的。
获取此消息的 Destination 对象。JMSDestination 标头字段包含消息要发送到的目的地。
发送消息时,忽略此字段。在发送或发布>方法完成后,该字段保存该方法指定的目的地。
有没有其他方法可以在之前的建议中访问 JmsDestination ?
编辑:也许有用的信息:我正在使用 ActiveMQ