中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

spring bean parse -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.szmdbiao.com - 電腦資料】

    BeanDefinitionParserDelegate

    解析

    如果id為空,就將name中的第一個(gè)值賦給id

    Entry-->BeanEntry

    public final class ParseState {

    /**

    * Tab character used when rendering the tree-style. representation.

    */

    private static final char TAB = '\t';

    /**

    * Internal {@link Stack} storage.

    */

    private final Stack state;

    /**

    * Create a new {@code ParseState} with an empty {@link Stack}.

    */

    public ParseState() {

    this.state = new Stack();

    }

    /**

    * Create a new {@code ParseState} whose {@link Stack} is a {@link Object#clone clone}

    * of that of the passed in {@code ParseState}.

    */

    @SuppressWarnings("unchecked")

    private ParseState(ParseState other) {

    this.state = (Stack) other.state.clone();

    }

    /**

    * Add a new {@link Entry} to the {@link Stack}.

    */

    public void push(Entry entry) {

    this.state.push(entry);

    }

    /**

    * Remove an {@link Entry} from the {@link Stack}.

    */

    public void pop() {

    this.state.pop();

    }

    /**

    * Return the {@link Entry} currently at the top of the {@link Stack} or

    * {@code null} if the {@link Stack} is empty.

    */

    public Entry peek() {

    return this.state.empty() ? null : this.state.peek();

    }

    /**

    * Create a new instance of {@link ParseState} which is an independent snapshot

    * of this instance.

    */

    public ParseState snapshot() {

    return new ParseState(this);

    }

    /**

    * Returns a tree-style. representation of the current {@code ParseState}.

    */

    @Override

    public String toString() {

    StringBuilder sb = new StringBuilder();

    for (int x = 0; x < this.state.size(); x++) {

    if (x > 0) {

    sb.append('\n');

    for (int y = 0; y < x; y++) {

    sb.append(TAB);

    }

    sb.append("-> ");

    }

    sb.append(this.state.get(x));

    }

    return sb.toString();

    }

    /**

    * Marker interface for entries into the {@link ParseState}.

    */

    public interface Entry {

    }

    }

    public class BeanEntry implements ParseState.Entry {

    private String beanDefinitionName;

    /**

    * Creates a new instance of {@link BeanEntry} class.

    * @param beanDefinitionName the name of the associated bean definition

    */

    public BeanEntry(String beanDefinitionName) {

    this.beanDefinitionName = beanDefinitionName;

    }

    @Override

    public String toString() {

    return "Bean '" + this.beanDefinitionName + "'";

    }

    }

    BeanDefinition的實(shí)例:GenericBeanDefinition bd = new GenericBeanDefinition();

    AbstractBeanDefinition-->BeanMetadataAttributeAccessor

    public class BeanMetadataAttributeAccessor extends AttributeAccessorSupport implements BeanMetadataElement {

    private Object source;

    ........

    }

    public abstract class AttributeAccessorSupport implements AttributeAccessor, Serializable {

    /** Map with String keys and Object values */

    private final Map attributes = new LinkedHashMap(0);

    ....

    }

    BeanMetadataAttribute attribute :

    public class BeanMetadataAttribute implements BeanMetadataElement {

    private final String name;

    private final Object value;

    private Object source;

    }

    LookupOverride:

    public class LookupOverride extends MethodOverride {

    private final String beanName;

    private Method method;

    .......}

    public abstract class MethodOverride implements BeanMetadataElement {

    private final String methodName;

    private boolean verloaded = true;

    private Object source;

    ...........}

    public class MethodOverrides {

    private final Set verrides = new LinkedHashSet(0);

    ......}

    ReplaceOverride:

    public class ReplaceOverride extends MethodOverride {

    private final String methodReplacerBeanName;

    private List typeIdentifiers = new LinkedList();

    ,

spring bean parse

,

電腦資料

spring bean parse》(http://www.szmdbiao.com)。。。。。}

    constructor-arg:只有一個(gè)子元素(must not contain more than one sub-element)

    is only allowed to contain either 'ref' attribute OR 'value' attribute OR sub-element

    ref作為屬性,則轉(zhuǎn)換成RuntimeBeanReference

    public class RuntimeBeanReference implements BeanReference {

    private final String beanName;

    private final boolean toParent;

    private Object source;

    。。。。}

    如果value作為屬性則轉(zhuǎn)換成:

    public class TypedStringValue implements BeanMetadataElement {

    private String value;

    private volatile Object targetType;

    private Object source;

    private String specifiedTypeName;

    private volatile boolean dynamic;

    。。。。。}

    構(gòu)造函數(shù)解析存放的對(duì)象:

    public class ConstructorArgumentValues {

    private final Map indexedArgumentValues = new LinkedHashMap(0);

    private final List genericArgumentValues = new LinkedList();

    。。。。}

    對(duì)應(yīng)

    沒有index的利用genericArgumentValues存放

    Property解析:

    public class PropertyValue extends BeanMetadataAttributeAccessor implements Serializable {

    private final String name;

    private final Object value;

    private Object source;

    private boolean ptional = false;

    private boolean converted = false;

    private Object convertedValue;

    /** Package-visible field that indicates whether conversion is necessary */

    volatile Boolean conversionNecessary;

    /** Package-visible field for caching the resolved property path tokens */

    transient volatile Object resolvedTokens;

    .......}

    其中PropertyValue 中的value保存的類型就是ManagedList

    public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor

    implements BeanDefinition, Cloneable {

    .........

    private MutablePropertyValues propertyValues;

    .........

    } 作為存儲(chǔ)默認(rèn)元素的屬性

    Qualifier子元素的解析:

    public class AutowireCandidateQualifier extends BeanMetadataAttributeAccessor {

    public static String VALUE_KEY = "value";

    private final String typeName;

    ......

    }

    public class BeanMetadataAttributeAccessor extends AttributeAccessorSupport implements BeanMetadataElement {

    private Object source;

    ..............

    }

    public abstract class AttributeAccessorSupport implements AttributeAccessor, Serializable {

    /** Map with String keys and Object values */

    private final Map attributes = new LinkedHashMap(0);

    ........

    }

最新文章