class XMapSpring extends XMap {

    @SuppressWarnings("unchecked")
    public XAnnotatedObject register(Class klass, ApplicationContext applicationContext) {
        XAnnotatedObject xao = objects.get(klass);
        if (xao == null) { // avoid scanning twice
            XObject xob = checkObjectAnnotation(klass, klass.getClassLoader());
            if (xob != null) {
                xao = new XAnnotatedSpringObject(this, klass, xob, applicationContext);
                objects.put(xao.klass, xao);
                scan(xao);
                String key = xob.value();
                if (key.length() > 0) {
                    roots.put(xao.path.path, xao);
                }
            }
        }
        return xao;
    }

    /**
     * Scan Field
     *
     * @param xob XAnnotated Object
     */
    private void scan(XAnnotatedObject xob) {<FILL_FUNCTION_BODY>}

    private XAnnotatedMember createExtendFieldMember(Field field, Annotation annotation,
                                                     XAnnotatedObject xob) {
        XSetter setter = new XFieldSetter(field);
        XGetter getter = new XFieldGetter(field);
        return createExtendMember(annotation, setter, getter, xob);
    }

    public final XAnnotatedMember createExtendMethodMember(Method method, Annotation annotation,
                                                           XAnnotatedObject xob) {
        XSetter setter = new XMethodSetter(method);
        XGetter getter = new XMethodGetter(null, null, null);
        return createExtendMember(annotation, setter, getter, xob);
    }

    private XAnnotatedMember createExtendMember(Annotation annotation, XSetter setter,
                                                XGetter getter, XAnnotatedObject xob) {
        XAnnotatedMember member = null;
        int type = annotation.annotationType().getAnnotation(XMemberAnnotation.class).value();
        if (type == XMemberAnnotation.NODE_SPRING) {
            member = new XAnnotatedSpring(this, setter, getter, (XNodeSpring) annotation,
                (XAnnotatedSpringObject) xob);
        } else if (type == XMemberAnnotation.NODE_LIST_SPRING) {
            member = new XAnnotatedListSpring(this, setter, getter, (XNodeListSpring) annotation,
                (XAnnotatedSpringObject) xob);
        } else if (type == XMemberAnnotation.NODE_MAP_SPRING) {
            member = new XAnnotatedMapSpring(this, setter, getter, (XNodeMapSpring) annotation,
                (XAnnotatedSpringObject) xob);
        }
        return member;
    }
}

        Field[] fields = xob.klass.getDeclaredFields();
        for (Field field : fields) {
            Annotation anno = checkMemberAnnotation(field);
            if (anno != null) {
                XAnnotatedMember member = createFieldMember(field, anno);
                if (member == null) {
                    member = createExtendFieldMember(field, anno, xob);
                }
                xob.addMember(member);
            }
        }

        Method[] methods = xob.klass.getDeclaredMethods();
        for (Method method : methods) {
            // we accept only methods with one parameter
            Class[] paramTypes = method.getParameterTypes();
            if (paramTypes.length != 1) {
                continue;
            }
            Annotation anno = checkMemberAnnotation(method);
            if (anno != null) {
                XAnnotatedMember member = createMethodMember(method, xob.klass, anno);
                if (member == null) {
                    member = createExtendMethodMember(method, anno, xob);
                }
                xob.addMember(member);
            }
        }
    
<methods>public void <init>() ,public org.w3c.dom.Document asXml(java.lang.Object, List<java.lang.String>) throws java.lang.Exception,public java.lang.String asXmlString(java.lang.Object, java.lang.String, List<java.lang.String>) throws java.lang.Exception,public java.lang.String asXmlString(java.lang.Object, java.lang.String, List<java.lang.String>, boolean) throws java.lang.Exception,public final com.alipay.sofa.common.xmap.XAnnotatedMember createFieldMember(java.lang.reflect.Field, java.lang.annotation.Annotation) ,public final com.alipay.sofa.common.xmap.XAnnotatedMember createMethodMember(java.lang.reflect.Method, Class<?>, java.lang.annotation.Annotation) ,public java.lang.reflect.Method getGetterMethod(Class<?>, java.lang.String) ,public Collection<com.alipay.sofa.common.xmap.XAnnotatedObject> getRootObjects() ,public Collection<com.alipay.sofa.common.xmap.XAnnotatedObject> getScannedObjects() ,public com.alipay.sofa.common.xmap.XValueFactory getValueFactory(Class#RAW) ,public java.lang.Object load(java.net.URL) throws java.lang.Exception,public java.lang.Object load(com.alipay.sofa.common.xmap.Context, java.net.URL) throws java.lang.Exception,public java.lang.Object load(java.io.InputStream) throws java.lang.Exception,public java.lang.Object load(com.alipay.sofa.common.xmap.Context, java.io.InputStream) throws java.lang.Exception,public java.lang.Object load(org.w3c.dom.Element) throws java.lang.Exception,public java.lang.Object load(com.alipay.sofa.common.xmap.Context, org.w3c.dom.Element) throws java.lang.Exception,public T load(Map<java.lang.String,java.lang.Object>, java.lang.String, Class<T>) throws java.lang.Exception,public java.lang.Object[] loadAll(java.net.URL) throws java.lang.Exception,public java.lang.Object[] loadAll(com.alipay.sofa.common.xmap.Context, java.net.URL) throws java.lang.Exception,public java.lang.Object[] loadAll(java.io.InputStream) throws java.lang.Exception,public java.lang.Object[] loadAll(com.alipay.sofa.common.xmap.Context, java.io.InputStream) throws java.lang.Exception,public java.lang.Object[] loadAll(com.alipay.sofa.common.xmap.Context, org.w3c.dom.Element) throws java.lang.Exception,public java.lang.Object[] loadAll(org.w3c.dom.Element) throws java.lang.Exception,public void loadAll(org.w3c.dom.Element, Collection<java.lang.Object>) throws java.lang.Exception,public void loadAll(com.alipay.sofa.common.xmap.Context, org.w3c.dom.Element, Collection<java.lang.Object>) throws java.lang.Exception,public com.alipay.sofa.common.xmap.XAnnotatedObject register(Class#RAW) ,public com.alipay.sofa.common.xmap.XAnnotatedObject register(Class#RAW, boolean) ,public void setValueFactory(Class#RAW, com.alipay.sofa.common.xmap.XValueFactory) <variables>private static final java.lang.String DDD,protected final non-sealed Map<Class#RAW,com.alipay.sofa.common.xmap.XValueFactory> factories,protected final non-sealed Map<Class#RAW,com.alipay.sofa.common.xmap.XAnnotatedObject> objects,protected final non-sealed Map<java.lang.String,com.alipay.sofa.common.xmap.XAnnotatedObject> roots