美文网首页
13-AbstractSingleBeanDefinitionP

13-AbstractSingleBeanDefinitionP

作者: 鹏程1995 | 来源:发表于2020-02-18 21:20 被阅读0次

背景简介

出现的原因

我们在上面的AbstractBeanDefinitionParser中,将所有的注册、通知还有id、别名相关的其他东西都给默认实现了,还提供了一堆用于流程控制的方法——shouldXXXXX

我们只需要根据各自需求实现parseInternal方法完成基本 BD 的生成,然后根据具体需求实现shouldXXXX来控制那些流程要走、那些流程不走即可。

我们这里进一步对parseInternal方法做了简化——BD 相关的通用属性都给你搞进去了,你只需要自己定义一些属性的填充工作即可。

职责

简化自定义的操作。但是也将自定义命名空间解析器的灵活度降低了。

注意点

有点鸡肋,除非必须要用时用来少写点代码,否则一般用不到。

源码

继承关系

1.png

源码

protected final AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
  // 生成 BeanDefinitionBuilder 实例,用来方便填充属性。类似 StringBuilder
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition();
    String parentName = getParentName(element);// 用于自定义获得 父BD 的方法 
    if (parentName != null) { 
        builder.getRawBeanDefinition().setParentName(parentName);
    }
    Class<?> beanClass = getBeanClass(element);// 用于自定义获得 BeanClass 的方法 
    if (beanClass != null) {
        builder.getRawBeanDefinition().setBeanClass(beanClass);
    } else {
        String beanClassName = getBeanClassName(element);// 用于自定义获得 BeanClassName 的方法 
        if (beanClassName != null) {
            builder.getRawBeanDefinition().setBeanClassName(beanClassName);
        }
    }
    builder.getRawBeanDefinition().setSource(parserContext.extractSource(element));
    BeanDefinition containingBd = parserContext.getContainingBeanDefinition();
    if (containingBd != null) {
        // Inner bean definition must receive same scope as containing bean.
        builder.setScope(containingBd.getScope());
    }
    if (parserContext.isDefaultLazyInit()) {
        // Default-lazy-init applies to custom bean definitions as well.
        builder.setLazyInit(true);
    }
    doParse(element, parserContext, builder);// 用于自定义其他属性的解析逻辑
    return builder.getBeanDefinition();
}

思路和我们之前介绍的AbstractBeanDefinitionParser一样,没得说。

问题

其实个人觉得,作出这些限制固然能进一步简化实现成本,但是为了方便使用而做的了解工作也加重了,有点得不偿失。领会精神吧。

扩展

相关文章

网友评论

      本文标题:13-AbstractSingleBeanDefinitionP

      本文链接:https://www.haomeiwen.com/subject/ywpnfhtx.html