【发布时间】:2014-05-08 17:29:23
【问题描述】:
我很难理解 Spring JMS 用于发送消息的模式。 JmsTemplate 类将 MessageCreator 作为参数。像这样:
JmsTemplate.send(MessageCreator messageCreator)
没有直接传递消息对象的选项。这似乎非常反 Spring,因为 MessageCreator 不能是单例。如果它是单例,由于这种方法,它不会是线程安全的:
MessageCreator.createMessage(Session session)
createMessage 方法只接受一个会话对象。所以为了让这个对象创建一个消息,它需要用一些状态来初始化,如果它有状态那么它就不能是单例的。
那么强迫我拥有 MessageCreator 的意义何在?因为在任何真实情况下,MyMessageCreator 总是看起来像这样:
public MyMessageCreator(String message) {
this.message = message;
}
public createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
因为生成消息总是需要一些 bean 或其他动态值。如果全部都做不到,为什么要在这个类中部分构建消息?
如果唯一的原因是我们有一个对 Session 对象的引用,那么我确信有更好的方法可以从 spring bean 访问这个实例(通过注入它,从模板本身获取它,或者使用一些工厂方法)。
我错过了什么吗?还是 MessageCreator 毫无意义?
【问题讨论】:
标签: spring spring-jms