private void handleMethodNacosConfigKeysChangeListener()

in spring-cloud-alibaba-starters/spring-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/annotation/NacosAnnotationProcessor.java [237:281]


	private void handleMethodNacosConfigKeysChangeListener(NacosConfigKeysListener annotation, String beanName, Object bean,
			Method method) {
		String dataId = annotation.dataId();
		String group = annotation.group();
		try {
			Class<?>[] parameterTypes = method.getParameterTypes();
			if (parameterTypes.length != 1 || !ConfigChangeEvent.class.isAssignableFrom(parameterTypes[0])) {
				throw new RuntimeException(
						"NacosConfigKeysChangeListener must be marked as a single parameter with ConfigChangeEvent");
			}

			String refreshTargetKey = beanName + "#method#" + methodSignature(method);
			TargetRefreshable currentTarget = targetListenerMap.get(refreshTargetKey);
			if (currentTarget != null) {
				log.info("[Nacos Config] reset {} listener from  {} to {} ", refreshTargetKey,
						currentTarget.getTarget(), bean);
				targetListenerMap.get(refreshTargetKey).setTarget(bean);
				return;
			}

			log.info("[Nacos Config] register {} listener on {} ", refreshTargetKey,
					bean);
			// annotation on string.
			NacosPropertiesKeyListener nacosPropertiesKeyListener = new NacosPropertiesKeyListener(bean, wrapArrayToSet(annotation.interestedKeys()),
					wrapArrayToSet(annotation.interestedKeyPrefixes())) {

				@Override
				public void configChanged(ConfigChangeEvent event) {
					ReflectionUtils.invokeMethod(method, this.getTarget(), event);
				}

				@Override
				public String toString() {
					return String.format("sca nacos config listener on bean method %s", bean + "#" + methodSignature(method));
				}
			};
			nacosPropertiesKeyListener.setLastContent(getGroupKeyContent(dataId, group));
			getNacosConfigManager().getConfigService().addListener(dataId, group,
					nacosPropertiesKeyListener);
			targetListenerMap.put(refreshTargetKey, nacosPropertiesKeyListener);
		}
		catch (Throwable e) {
			throw new RuntimeException(e);
		}
	}