content: package com.alibaba.tamper.core.introspect;
  
  import java.lang.reflect.Field;
  
  import com.alibaba.tamper.core.BeanMappingException;
  
  /**
   * 基于field属性的直接操作
   * 
   * @author jianghang 2011-6-27 下午08:05:41
   */
  public class FieldSetExecutor extends AbstractExecutor implements SetExecutor {
  
      private Field field;
  
      protected FieldSetExecutor(Introspector is, Class<?> clazz, String identifier, Class arg){
          super(clazz, identifier);
          field = discover(is, clazz, identifier, arg);
      }
  
      @Override
      public boolean isAlive() {
          return field != null;
      }
  
      @Override
      public Object invoke(Object obj, Object value) throws BeanMappingException {
          try {
              field.set(obj, value);
              return value;
          } catch (Exception e) {
              throw new BeanMappingException("field invoke error!", e);
          }
      }
  
      public static Field discover(Introspector is, Class<?> clazz, String property, Class arg) {
          Field field = is.getField(clazz, property);// 直接通过class获取属性
          if (field != null) {
              if (arg != null && field.getType() != arg) { // 判断类型是否匹配
                  return null;
              }
  
              field.setAccessible(true); // 设置为true
              return field;
          } else {
              return null;
          }
      }
  
      public Field getField() {
          return field;
      }
  }
  