This shows configuring the JMS listener using Springs jms 
                custom namespace.  The jmsMessageListener bean was loaded 
                by the context:component-scan and implements MessageListener.
                If it didn't the jms:listener element could specify which method 
                should process a message from the queue.  The jms:listener 
                specifies the destination attribute to be 'org.springbyexample.jms.test', which 
                matches the queue defined by the amq:queue element in the embedded ActiveMQ configuration.
            
    
                The AtomicInteger is used by the listener to increment how many messages it processes, and 
                is also used by the unit test to confirm is received all the messages from the producer.
            
Excerpt from JmsMessageListenerTest-context.xml
                    
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jms="http://www.springframework.org/schema/jms"
       xmlns:amq="http://activemq.apache.org/schema/core"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/jms 
                           http://www.springframework.org/schema/jms/spring-jms.xsd
                           http://activemq.apache.org/schema/core 
                           http://activemq.apache.org/schema/core/activemq-core.xsd">
 
    <context:component-scan base-package="org.springbyexample.jms" />
    
    ...
    <!-- JMS Consumer Configuration -->
    <bean id="jmsConsumerConnectionFactory" 
          class="org.springframework.jms.connection.SingleConnectionFactory"
          depends-on="broker"
          p:targetConnectionFactory-ref="jmsFactory" />
        
    <jms:listener-container container-type="default" 
                            connection-factory="jmsConsumerConnectionFactory"
                            acknowledge="auto">
        <jms:listener destination="org.springbyexample.jms.test" ref="jmsMessageListener" />
    </jms:listener-container>
    <!-- Counter for consumer to increment and test to verify count -->
    <bean id="counter" class="java.util.concurrent.atomic.AtomicInteger" />
    
</beans>
                    
                
                The JmsMessageListener implements the JMS interface 
                MessageListener.  The int property for the 
                message count can be retrieved before casting the message to TextMessage.
                Then the message and message count are both logged.
            
Example 2. JmsMessageListener
                    
@Component
public class JmsMessageListener implements MessageListener { 
    private static final Logger logger = LoggerFactory.getLogger(JmsMessageListener.class);
    @Autowired
    private AtomicInteger counter = null;
    /**
     * Implementation of <code>MessageListener</code>.
     */
    public void onMessage(Message message) {
        try {   
            int messageCount = message.getIntProperty(JmsMessageProducer.MESSAGE_COUNT);
            
            if (message instanceof TextMessage) {
                TextMessage tm = (TextMessage)message;
                String msg = tm.getText();
                
                
                logger.info("Processed message '{}'.  value={}", msg, messageCount);
                
                counter.incrementAndGet();
            }
        } catch (JMSException e) {
            logger.error(e.getMessage(), e);
        }
    }
    
}