解析BeanDefinition之解析各种属性。

来源:互联网 发布:网络奇谈恐惧鸟电子版 编辑:程序博客网 时间:2024/06/05 14:18

// 硬编码解析默认bean的各种属性

parseBeanDefinitionAttributes(ele, beanName, containingBean, bd);


当我们创建了bean信息的承载实例后,便可以进行bean信息的各种属性解析了,首先我们进入parseBeanDefinitionAttributes方法。parseBeanDefinitionAttributes方法是对element所有元素属性进行解析,部分代码如下:


public AbstractBeanDefinition parseBeanDefinitionAttributes(Element ele, String beanName, BeanDefinition containingBean, AbstractBeanDefinition bd) {

  // 解析scope属性并且判断scope与singleton两个属性只能指定其中之一,不可以同时出现,否则Spring将会报出异常

  bd.setScope(ele.getAttribute(SCOPE_ATTRIBUTE);

  // 解析singleton属性

  bd.setSCope(TRUE_VALUE.equals(ele.getAttribute(SINGLETON_ATTRIBUTE)) ? BeanDefinition.SCOPE_SINGLETON : BeanDefinition.SCOPE_PROTOTYPE);

  // 在嵌入BeanDefinition情况下且没有单独指定scope属性则使用父类默认的属性

  bd.setScope(containingBean.getScope());

  // 解析 abstract属性

  bd.setAbstract(TRUE_VALUE.equals(ele.getAttribute(ABSTRACT_ATTRIBUTE)));

  // 解析lazy-init属性,若没有设置或设置成其他字符都会被设置为false

  bd.setLazyInit(TRUE_VALUE.equals(lazyInit));

  // 解析autowire属性

  bd.setAutowireMode(getAutowireMode(ele.getAttribute(AUTOWIRE_ATTRIBUTE)));

  // 解析dependency-check属性

  bd.setDependencyCheck(getDependencyCheck(ele.getAttribute(DEPENDENCY_CHECK_ATTRIBUTE)));

  // 解析depends-on属性

  bd.setDependsOn(StringUtils.tokenizeToStringArray(ele.getAttribute(DEPENDSON, MULTI_VALUE_ATTRIBUTE_DELIMITERS)));

  // 解析autowire-candidate属性

  bd.setAutowireCandidate(TRUE_VALUE.equals(autowireCandidate));

  // 解析primary属性

  bd.setPrimary(TRUE_VALUE.equals(ele.getAttribute(PRIMARY_ATTRIBUTE)));

  // 解析init-method属性

  bd.setInitMethodName(ele.getAttribute(INIT_METHOD_ATTRIBUTE));

  // 解析destroy-method属性

  bd.setDestroyMethodName(ele.getAttribute(DESTROY_METHOD_ATTRIBUTE));

  // 解析factory-method属性

  bd.setFactoryMethodName(ele.getAttribute(FACTORY_METHOD_ATTRIBUTE));

  // 解析factory-bean属性

  bd.setFactoryBeanName(ele.getAttribute(FACTORY_BEAN_ATTRIBUTE));

  return bd;

}

原创粉丝点击