1

我有一个应用程序,它使用 Spring 以各种组合连接一些 bean。以下是有助于说明应用程序相关部分的简化类。

class A {
   private List<B> fieldB;

    public void setFieldB(List<B> fieldB) { this.fieldB = fieldB; }
    public List<B> getFieldB() { return this.fieldB; }
}

class B {
    private String name;
    private String field1;
    private String field2;

    public void setName(String name) { this.name = name; }
    public void setField1(String value1) { this.field1 = value1; }
    public void setField2(String value2) { this.field2 = value2; }

    public String getName() { return this.name; }
    public String getField1() { return this.field1; }
    public String getField2() { return this.field2; }
}

spring-context-file1.xml

<?xml ...>
<beans ...>
    <bean id="a" class="com.example.A">
        <property name="fieldB">
           <list> <ref bean="b1"/> <ref bean="b2"/> </list>
        </property>
    </bean>

    <bean id="b1" class="com.example.B">
        <property name="name">
           <value>b1</value>
        </property>
        <property name="field1">
           <value>fieldOneValueOne</value>
        </property>
        <property name="field2">
           <value>fieldOneValueTwo</value>
        </property>
    <bean>

    <bean id="b2" class="com.example.B">
        <property name="name">
           <value>b2</value>
        </property>
        <property name="field1">
           <value>fieldTwoValueOne</value>
        </property>
        <property name="field2">
           <value>fieldTwoValueTwo</value>
        </property>
    <bean>
</beans>

鉴于上述情况,我想做的是在构建时提取以下信息:

spring-context-file1.cfg  
b1 => {fieldOneValueOne, fieldOneValueTwo}  
b2 => {fieldTwoValueOne, fieldTwoValueTwo} 

我选择开发一个 Maven 插件来完成这个必要的处理。基本上,插件将加载 Spring 上下文文件并使用 getBean("...") 方法来获取感兴趣的 bean。然而,我遇到了一个问题。为了从 bean 中提取信息,插件代码需要知道它正在操作什么类型的对象。这意味着插件代码需要针对主项目代码进行编译。这对我来说似乎是错误的。有没有人知道 Maven 插件提取此类信息的任何方法?

4

1 回答 1

1

我认为与其从 Spring 配置文件中提取信息,不如创建一个公共文件,Spring 上下文可以从中加载 bean 属性。然后,您可以在构建时非常轻松地解析此文件(希望无需编写自定义 Maven 插件——这将使您的构建变得非常复杂)。看看 Spring 3.1 中的新属性管理:http: //blog.springsource.com/2011/02/15/spring-3-1-m1-unified-property-management/

于 2012-06-06T15:11:36.400 回答