private Map<String, Object> values(final int type,
			final ValueVisitor defaultVisitor) {
		Class<?> clazz = getClass();
		final FieldDefinitionImpl thiz = this;
		final Map<String, Object> map = new HashMap<String, Object>();
		SpringReflectionUtils.doWithFields(clazz,
				new SpringReflectionUtils.FieldCallback() {

					public void doWith(Field field)
							throws IllegalArgumentException,
							IllegalAccessException {
						if (!field.isAnnotationPresent(FieldDefinition.class)) {
							return;
						}
						FieldDefinition def = field
								.getAnnotation(FieldDefinition.class);
						// 映射名
						String key = def.mappingName();
						if (type == 1) {// 属性名
							key = def.propertyName();
						} else if (type == 2) {// 列名
							key = def.columnName();
						}
						// 忽略未声明的值
						if (key.equals("")) {
							return;
						}
						Object value = null;
						field.setAccessible(true);
						value = field.get(thiz);
						Class<?> targetClass = field.getType();
						Map<String, Object> params = new HashMap<String, Object>(
								1);
						params.put("escape", def.escape());
						if (visitors.containsKey(targetClass)) {
							ValueVisitor visitor = visitors.get(targetClass);
							value = visitor.target(targetClass, value, params);
						} else if (defaultVisitor != null) {
							value = defaultVisitor.target(targetClass, value,
									params);
						}
						map.put(key, value);
					}
				}, SpringReflectionUtils.COPYABLE_FIELDS);

		return map;
	}