可以通过XML定义bean构造型吗?

时间:2014-07-22 12:00:44

标签: xml spring stereotype

通过XML可以定义bean构造型吗?有点像:

<bean ... stereotype="org.springframework.stereotype.Service">
</bean>

或,

<bean...>
    <stereotype class="mypackage.myStereotype" />
</bean> 

2 个答案:

答案 0 :(得分:0)

无法动态地向类添加注释。对您的问题的简单回答是:不,不可能通过XML应用构造型注释。

然而,构造型注释通常仅用作AOP组件的标记注释(以及组件扫描)。您可以定义自己的AOP behavior。当然,您将无法使用任何内置的<xyz:annotation-driven \>快捷方式声明/配置。

答案 1 :(得分:0)

最简单的解决方案可能是使用如下任意的spring bean元数据:

<bean id="fooService" class="org.example.FooServiceImpl">
    <meta key="stereotype" value="mypackage.myStereotype" />
</bean>

spring-beans.xsd中元元素的定义是:                                         

<xsd:complexType name="metaType">
    <xsd:attribute name="key" type="xsd:string" use="required">
        <xsd:annotation>
            <xsd:documentation><![CDATA[
The key name of the metadata attribute being defined.
            ]]></xsd:documentation>
        </xsd:annotation>
    </xsd:attribute>
    <xsd:attribute name="value" type="xsd:string" use="required">
        <xsd:annotation>
            <xsd:documentation><![CDATA[
The value of the metadata attribute being defined (as a simple String).
            ]]></xsd:documentation>
        </xsd:annotation>
    </xsd:attribute>
</xsd:complexType>

然后,您可以使用BeanDefinitionRegistry.getBeanDefinition(String)BeanDefinition.getAttribute(String name)来读取bean的构造型并对其进行处理。

另一种可能性是使用spring bean schema authoring facilities。因此,您需要按照BeanDefinitionDecorator

中的说明实施reference documentation example