private String getSourceBeanKey(MessageSourceMetrics handler) {
   // This ordering of keys seems to work with default settings of JConsole
   return String.format(
       domain + ":type=MessageSource,name=%s,bean=%s" + getStaticNames(),
       handler.getName(),
       handler.getSource());
 }
 private void registerSources() {
   for (SimpleMessageSourceMetrics source : sources) {
     MessageSourceMetrics monitor = enhanceSourceMonitor(source);
     String name = monitor.getName();
     this.allSourcesByName.put(name, monitor);
     if (!PatternMatchUtils.simpleMatch(this.componentNamePatterns, name)) {
       continue;
     }
     // Only register once...
     if (!sourcesByName.containsKey(name)) {
       String beanKey = getSourceBeanKey(monitor);
       if (name != null) {
         sourcesByName.put(name, monitor);
       }
       registerBeanNameOrInstance(monitor, beanKey);
       // Expose the raw bean if it is managed
       MessageSource<?> bean = source.getMessageSource();
       if (assembler.includeBean(bean.getClass(), source.getName())) {
         registerBeanInstance(bean, this.getMonitoredIntegrationObjectBeanKey(bean, name));
       }
     }
   }
 }