• 与路同飞
    2020-09-19
    自定义的xml会走到 element delegate.parseCustomElement 从Element中获取namespaceUri=http://www.sunxu.com/schema/users DefaultNamespaceHandlerResolver中getHandlerMappings获取META-INF/spring.handlers 中所有uri和NamespaceHandler的映射关系。根据namespaceUri=http://www.sunxu.com/schema/users获取自定义namespaceHandler,然后执行init方法注册自定义BeanDefinitionParser。 然后执行自定义namespaceHandler的parse方法,该方法会根据自定义注册BeanDefinitionParser名称去查找自定义 BeanDefinitionParser,委托自定义的BeanDefinitionParser去解析,然后调用AbstractSingleBeanDefinitionParser的parseInternal 去新建BeanDefinitionBuilder,然后设置BeanDefinition的Class,属性(自定义BeanDefinitionParser定义的)等。 ####
    展开

    作者回复: 666

    
    8
  • 逍遥叹
    2020-04-08
    dubbo里面就是这样扩展的

    作者回复: 是的

    
    8
  • 小杨同学
    2020-10-22
    能看到100讲的几乎都是源码玩家,很多新手看到 spring 就觉得是入门课程,然后被劝退了,小马哥“劝退师”名不虚传呀!

    作者回复: 哈哈,其实不少小伙伴在硬着头皮看呢

    共 3 条评论
    4
  • 五点半先生
    2020-05-07
    一般哪些场景需要扩展这个XML文件呢?

    作者回复: 比如 MyBatis,Dubbo 等整合 Spring 的框架。

    
    4
  • fullmoon
    2020-12-29
    Mybatis 对 Spring 的集成项目中的 `<mybatis:scan />` 标签就是这样实现的,可以参考:[NamespaceHandler](https://github.com/mybatis/spring/blob/master/src/main/java/org/mybatis/spring/config/NamespaceHandler.java)、[MapperScannerBeanDefinitionParser](https://github.com/mybatis/spring/blob/master/src/main/java/org/mybatis/spring/config/MapperScannerBeanDefinitionParser.java)、[XSD 文件](https://github.com/mybatis/spring/tree/master/src/main/resources)

    作者回复: 666,实际上,这个在最后的面试题有讲解~

    
    2
  • 边缘
    2022-08-29 来自四川
    1. 根据 namespace 获取映射当中配置的 NamesapceHandler; 2. 获取 localName 获取注册的解析器, 获取解析器以后调用 parse 方法进行解析 3. 根据 Element 和 parseContext 构造 AbstractBeanDefinition (此处需要设置 parent、beanClass、scope)。并调用解析器的 parse 方法,将自定义回调操作进行执行。 4. 构建 BeanDefinitionHolder 5. 根据 BeanDefinitionHolder 进行 BeanDefinition 注册。 注意事项: 在第三个步骤中,如果自定义的解析器 UsersBeanDefinitionParser 没有重写 getBeanClass 方法,将会导致获取 beanClass 为 null。后续再通过 beanFactory.getBean 进行依赖查找时,获取不到 BeanClass, 导致实例化失败。

    作者回复: 👍

    
    1
  •  erlie
    2021-03-11
    顺便把dubbo基于xml和java注解的配置也看懂了,小马哥的课程每次看都能有不同的感受,一看就停不下来,真的太系统了,别的老师讲课一点也没有这种系统观,只知道一行一行debug代码

    作者回复: 感谢支持~

    
    1
  • Boomkeeper
    2020-07-23
    按照老师的步骤操作,有点问题,网上的解决方案就是瞎说 Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from class path resource [META-INF/application-extend.xml] is invalid; nested exception is org.xml.sax.SAXParseException; systemId: http://time.geekbang.org/users.xsd; lineNumber: 12; columnNumber: 63; White spaces are required between publicId and systemId.

    作者回复: 你看看提示:“在 publicId 和 systemId 之间需要空格”,所以调整一下格式即可

    
    1
  • 中年英雄王叔叔
    2021-12-31
    小马哥 如果看webx源码 肯定毫无压力

    作者回复: 阿里的Webx 吗?

    
    