spring中模板模式的应用

来源:互联网 发布:ios9越狱mac 编辑:程序博客网 时间:2024/05/18 02:02

1.在代码中调用

public class AlertServiceImpl implements AlertService {    @Autowired    JmsTemplate jmsTemplate;    @Override    public void sendAlert(final String alert) {          jmsTemplate.send("test.myqueue",new MessageCreator() {              @Override              public Message createMessage(Session session) throws JMSException {                 return session.createTextMessage(alert) ;//To change body of implemented methods use File | Settings | File Templates.              }          });    }}

2.源码分析

JmsTemplate中封装基本操作
public void send(final String destinationName, final MessageCreator messageCreator) throws JmsException {    this.execute(new SessionCallback() {        public Object doInJms(Session session) throws JMSException {            Destination destination = JmsTemplate.this.resolveDestinationName(session, destinationName);            JmsTemplate.this.doSend(session, destination, messageCreator);            return null;        }    }, false);}
public <T> T execute(SessionCallback<T> action, boolean startConnection) throws JmsException {    Assert.notNull(action, "Callback object must not be null");    Connection conToClose = null;    Session sessionToClose = null;    Object var6;    try {        Session ex = ConnectionFactoryUtils.doGetTransactionalSession(this.getConnectionFactory(), this.transactionalResourceFactory, startConnection);        if(ex == null) {            conToClose = this.createConnection();            sessionToClose = this.createSession(conToClose);            if(startConnection) {                conToClose.start();            }            ex = sessionToClose;        }        if(this.logger.isDebugEnabled()) {            this.logger.debug("Executing callback on JMS Session: " + ex);        }        var6 = action.doInJms(ex);    } catch (JMSException var11) {        throw this.convertJmsAccessException(var11);    } finally {        JmsUtils.closeSession(sessionToClose);        ConnectionFactoryUtils.releaseConnection(conToClose, this.getConnectionFactory(), startConnection);    }    return var6;}
execute该方法张有基本的创建和关闭 connection 和session操作,中间利用session做的具体个性化操作,则通过SessionCallback  回调方式传入

回调接口定义

public interface SessionCallback<T> {    T doInJms(Session var1) throws JMSException;}

3.接受消息



1 0
原创粉丝点击