private void handleFiledNacosConfigAnnotationInner()

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


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

			//primitive type
			if (handPrimitiveFiled(field, dataId, group, config, key, defaultValue, beanName, bean)) {
				return;
			}

			//for other type.
			if (org.springframework.util.StringUtils.hasText(config)) {
				Object targetObject = convertContentToTargetType(config, field.getGenericType());
				//yaml and json to object
				ReflectionUtils.setField(field, bean, targetObject);
			}

			String refreshTargetKey = beanName + "#filed#" + field.getName();
			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, field.getGenericType());
								ReflectionUtils.setField(field, getTarget(), targetObject);
							}
						}
						catch (Exception e) {
							throw new RuntimeException(e);
						}
					}

					@Override
					public String toString() {
						return String.format("[spring cloud alibaba nacos config key listener , key %s , target %s ] ", key, bean + "#" + field.getName());
					}
				};
			}
			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, field.getGenericType());
							ReflectionUtils.setField(field, getTarget(), targetObject);
						}
					}

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

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

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