1

我使用自定义命名空间来简化一些框架组件的部署。

我们的配置看起来或多或少像:

<rf:container attribute1="id">
  <property name="processors" value="5" />
</rf:container>

具有许多自定义强制属性和一组可选属性。它被解析成一个bean定义。现在应该扩展它以接受表示为 bean 的属性,该 bean 可以共享或仅为该 bean 声明。

定义为独立 bean 时的配置 bean 定义创建为:

<rf:config id="queue" size="100" bytes="1M"/>

然后可以将其设置为属性或直接嵌入到 <property> 标记中。

但我想简化它并提供一个快捷方式,例如:

<rf:container attribute1="id">
  <property name="processors" value="5" />
  <rf:config size="100" bytes="1M"/>
</rf:container>

这将使配置在许多情况下对我来说更具表现力。

目前这两个标签都由 BeanDefinitionParser 实现解析。我尝试将 BeanDefinitionDecorator 用于同名,但看起来我并不完全了解如何使用其中一个或两个。

当使用 DefaultBeanDefinitionDocumentReader(即 <bean> 标签)内部的标准方式解析 bean 时应用装饰器,但使用自定义解析器时不会执行此代码。在我们的解析器实现中,普通属性是通过在 parse 方法中手动调用 parsePropertyElements() 来解析的,但是调用装饰器解析更加困难,因为此时 BeanDefinitionHolder 还没有准备好。

确保为自定义 bean 解析器解析装饰器的正确方法是什么?

当前的解决方案在内部显式搜索我们自己的标签并处理它们,但在我看来确实是错误的。

4

0 回答 0