ObjectWrapper
該類的作用是對象的包裝,對對象屬性的操作,其行為有
BaseWrapper
具備了MetaObject,對象包裝的公共父類,主要處理集合類型
BeanWrapper
具備了儲存對象的Object和MetaClass
@Override public Object get(PropertyTokenizer prop) { if (prop.getIndex() != null) { // 使用MetaObject逐級實例化集合對象 Object collection = resolveCollection(prop, object); // 使用MetaObject獲得Value return getCollectionValue(prop, collection); } else { return getBeanProperty(prop, object); } }
MetaObject
private final Object originalObject; private final ObjectWrapper objectWrapper; private final ObjectFactory objectFactory; private final ObjectWrapperFactory objectWrapperFactory; private final ReflectorFactory reflectorFactory; private MetaObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) { this.originalObject = object; this.objectFactory = objectFactory; this.objectWrapperFactory = objectWrapperFactory; this.reflectorFactory = reflectorFactory; // 根據originalObject的類型實例化具體的ObjectMapper,將MetaObject自己注入進去,委派模式 if (object instanceof ObjectWrapper) { this.objectWrapper = (ObjectWrapper) object; } else if (objectWrapperFactory.hasWrapperFor(object)) { this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object); } else if (object instanceof Map) { this.objectWrapper = new MapWrapper(this, (Map) object); } else if (object instanceof Collection) { this.objectWrapper = new CollectionWrapper(this, (Collection) object); } else { this.objectWrapper = new BeanWrapper(this, object); } }
獲得初始對象的屬性值通過ObjectWrapper並可能委派給MetaObject來獲得。