我很难理解Spring JMS用来发送消息的模式。 JmsTemplate类将MessageCreator作为参数。像这样:为什么Spring JMS框架使用MessageCreator?
JmsTemplate.send(MessageCreator messageCreator)
没有选项可以直接传递Message对象。这看起来很反Spring,因为MessageCreator不能是Singleton。如果它是单身人士,则由于此方法而不是线程安全的:
MessageCreator.createMessage(Session session)
createMessage方法只接受一个会话对象。所以为了让这个对象创建一个消息,它需要用某种状态初始化,如果它有状态,那么它不能是单例。
那么强迫我使用MessageCreator有什么意义呢?因为在任何真实情况MyMessageCreator永远是这样的:
public MyMessageCreator(String message) {
this.message = message;
}
public createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
由于生成消息总是需要一些豆类或其他动态值。为什么一些这个类的消息构造如果都是都不能做?
如果唯一的原因是我们有一个Session对象的引用,那么我肯定有一个更好的方法来从Spring bean访问这个实例(通过注入它,从模板本身获取它,或者使用一些工厂方法)。
我错过了什么吗?或者是MessageCreator毫无意义?
当Spring提供MessageConverter抽象时,为什么要使用Session对象?只是不能想到这个MessageCreator的任何用例都无法用其他结构来完成。 – luboskrnac
不知道你在想什么'MessageConverter'抽象,但是JMS需要这个会话。出于一个明显的原因,当您创建一个'javax.jms.Message'时,JMS API需要您传递会话。 –