从模板生成Spring上下文文件

时间:2011-10-18 17:14:06

标签: java spring configuration

我的上下文定义文件中有很多重复的bean,只有名称不同。

因此,当我想要定义bean a,b和c时,我必须添加:

<bean id="a" class="org.project.A" />
<bean id="b" class="org.project.B" />
<bean id="c" class="org.project.C" />
<bean id="aDao" class="org.project.ADAO" />
<bean id="bDao" class="org.project.BDAO" />
<bean id="cDao" class="org.project.CDAO" />

由于有超过3个bean,我想要类似的东西:

bean: a,b,c
templates:
- <bean id=":bean:" class="org.project.:bean:upper:" />
- <bean id=":bean:Dao" class="org.project.:bean:upper:DAO" />

在Spring中有没有办法做到这一点? 如果我必须实现自己的解决方案,在尝试导入生成的文件之前如何让Spring调用此函数?

4 个答案:

答案 0 :(得分:2)

Spring中没有这样的功能。您可以编写maven插件或其他一些搜索bean的预处理工具并生成XML文件。

或者您可以让Spring执行此操作并通过使用@Service@Repository和朋友注释您的bean来完全删除XML定义。

答案 1 :(得分:1)

如果使用annotation based container configuration,则无需生成bean定义xml元素。

答案 2 :(得分:0)

在我的一个项目中,我使用Apache Velocity使用模板文件为IoC框架生成配置。模板语言简单而强大。 您可以将其实现为Java应用程序,从Ant调用它等等。

http://velocity.apache.org/

答案 3 :(得分:0)

我最后一次检查(几年前),Spring使用以下(简化)算法来创建bean:

  1. 读取XML文件以获取bean定义。 bean是不是立即创建的。相反,它们的定义保存在一些数据结构中,稍后(在步骤4中)将查询以创建bean。

  2. Spring迭代每个bean定义,并使用反射来检查bean的类是否实现了BeanFactoryPostProcessor接口。

  3. 如果是,则创建该bean并调用其postProcessBeanFactory()操作。该方法通常被编码为迭代所有bean定义并修改其中一些,例如,将"${property.value}"替换为从Java属性文件中读取的属性的值。

  4. 之后,根据(可能修改的)bean定义创建剩余的(“普通”)bean。

  5. 自从我上次查看Spring以来已经有好几年了,但如果它仍然以相同的方式运行,那么就可以实现一个实现BeanFactoryPostProcessor接口的类,代码postProcessBeanFactory()将bean的id属性附加到其class属性上。