JsTopicMessageController getJsTopicMessageControllerFromIterable(String topic, Iterable<JsTopicMessageController<?>> controllers) {
		if(null == controllers || null == topic) {
			return null;
		}
		for (JsTopicMessageController<?> jsTopicMessageController : controllers) {
			JsTopicControls jsTopicControls = jsTopicControlsTools.getJsTopicControlsFromProxyClass(jsTopicMessageController.getClass());
			if(null != jsTopicControls) {
				JsTopicControl[] jsTopicControlList = jsTopicControls.value();
				for (JsTopicControl jsTopicControl : jsTopicControlList) {
					if(topic.equals(jsTopicControl.value())) {
						logger.debug("Found messageController for topic '{}' from JsTopicControls annotation", topic);
						return jsTopicMessageController;
					}
				}
			}
		}
		return null;
	}
JsTopicMessageController getJsTopicMessageControllerFromIterable ( String topic , Iterable < JsTopicMessageController < ? > > controllers ) { if ( null == controllers || null == topic ) { return null ; } for ( JsTopicMessageController < ? > jsTopicMessageController : controllers ) { JsTopicControls jsTopicControls = jsTopicControlsTools . getJsTopicControlsFromProxyClass ( jsTopicMessageController . getClass ( ) ) ; if ( null != jsTopicControls ) { JsTopicControl [ ] jsTopicControlList = jsTopicControls . value ( ) ; for ( JsTopicControl jsTopicControl : jsTopicControlList ) { if ( topic . equals ( jsTopicControl . value ( ) ) ) { logger . debug ( "Found messageController for topic '{}' from JsTopicControls annotation" , topic ) ; return jsTopicMessageController ; } } } } return null ; }
without jdk8, @Repeatable doesn't work, so we use @JsTopicControls annotation and parse it
@param topic
@param controllers
@return