spring中模板模式的应用

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.接受消息

----
spring mvc+tomcat源码分析视频(链接复制在浏览器打开)

https://study.163.com/course/courseMain.htm?share=2&shareId=480000001919582&courseId=1209399899&_trace_c_p_k2_=6d81bc445e9c462ab8d6345e40f6b0bf

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值