private void handleBeanNacosConfigAnnotation()

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


	private void handleBeanNacosConfigAnnotation(String dataId, String group, String key, String beanName, Object bean,
			String defaultValue) {
		try {
			String config = getDestContent(getGroupKeyContent(dataId, group), key);
			if (!org.springframework.util.StringUtils.hasText(config)) {
				config = defaultValue;
			}

			//Init bean properties.
			if (org.springframework.util.StringUtils.hasText(config)) {
				Object targetObject = convertContentToTargetType(config, bean.getClass());
				//yaml and json to object
				BeanUtils.copyProperties(targetObject, bean, getNullPropertyNames(targetObject));
			}

			String refreshTargetKey = beanName + "#instance#";
			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);
			TargetRefreshable listener = null;
			if (org.springframework.util.StringUtils.hasText(key)) {
				listener = new NacosPropertiesKeyListener(bean, wrapArrayToSet(key)) {

					@Override
					public void configChanged(ConfigChangeEvent event) {
						try {
							ConfigChangeItem changeItem = event.getChangeItem(key);
							String newConfig = changeItem == null ? null : changeItem.getNewValue();
							if (!org.springframework.util.StringUtils.hasText(newConfig)) {
								newConfig = defaultValue;
							}
							if (org.springframework.util.StringUtils.hasText(newConfig)) {
								Object targetObject = convertContentToTargetType(newConfig, getTarget().getClass());
								//yaml and json to object
								BeanUtils.copyProperties(targetObject, getTarget(), getNullPropertyNames(targetObject));
							}
						}
						catch (Exception e) {
							throw new RuntimeException(e);
						}
					}

					@Override
					public String toString() {
						return String.format("[spring cloud alibaba nacos config instance key listener , key %s , target %s ] ", key, bean);
					}
				};
			}
			else {
				listener = new NacosConfigRefreshableListener(bean) {

					@Override
					public void receiveConfigInfo(String configInfo) {
						if (!org.springframework.util.StringUtils.hasText(configInfo)) {
							configInfo = defaultValue;
						}
						if (org.springframework.util.StringUtils.hasText(configInfo)) {
							Object targetObject = convertContentToTargetType(configInfo, bean.getClass());
							//yaml and json to object
							BeanUtils.copyProperties(targetObject, getTarget(), getNullPropertyNames(targetObject));
						}
					}

					@Override
					public String toString() {
						return String.format("[spring cloud alibaba nacos config instance  listener , key %s , target %s ] ", key, bean);
					}
				};
			}

			getNacosConfigManager().getConfigService()
					.addListener(dataId, group, listener);
			targetListenerMap.put(refreshTargetKey, listener);

		}
		catch (Exception e) {
			throw new RuntimeException(e);
		}
	}