我有一个应用程序,它使用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; }
}
弹簧上下文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插件提取这类信息的方法?
答案 0 :(得分:1)
我认为不应该从Spring配置文件中提取信息,而是应该创建一个Spring上下文可以从中加载bean属性的公共文件。然后你可以在构建时很容易地解析这个文件(希望没有编写自定义的Maven插件 - 这会使你的构建变得非常复杂)。看一下Spring 3.1中的新属性管理:http://blog.springsource.com/2011/02/15/spring-3-1-m1-unified-property-management/