从另一个Maven模块创建Bean

时间:2018-04-20 09:37:57

标签: spring maven

在Maven项目中创建bean非常简单。您将@Autowired注释添加到要创建的bean中,然后在spring-config.xml中声明其配置:

@Autowired
private ExampleBean exampleBean;
.
.
.

<bean id="exampleBean" class="path.to.your.bean">
    <property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>

但是如果我有一个多模块的Maven项目并且我想创建的bean来自构建路径中引用的另一个模块呢?你如何创建那个bean?

我考虑了注释@Resource,但它似乎没有“检测”来自构建路径中添加的另一个模块的bean。

更新1 : 基于Rémi的回答,这就是我所做的:

我将以下行添加到我希望在以下位置创建bean的模块的xml配置文件中:

<import resource="classpath:\dsp2aisp-business\*\root-context.xml" />

我还在@Autowired上保留了AccountService注释(这是我想在此模块中使用的bean)。

在声明AccountService的另一个模块中,我添加了bean声明:

<bean id="accountService" class="fr.bnp.dsp2aisp.service.AccountService">
    <property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>

但我一直收到这个错误:

Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [fr.bnp.dsp2aisp.service.AccountService] for bean with name 'accountService' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]; nested exception is java.lang.ClassNotFoundException: fr.bnp.dsp2aisp.service.AccountService

但我确信该类确实存在于指定的路径中。

是否有其他方法可以使用在另一个Maven模块中声明的bean?

2 个答案:

答案 0 :(得分:1)

我终于开始工作了。当你有一个多模块的Maven项目,并且你试图将其中一个模块导入另一个模块以使用它的类时,你不应该从构建路径添加你的模块(属性 - &gt; Java Build路径 - &gt;项目 - &gt;添加)因为编译器无法在运行时找到这些类。

您需要做的只是将这些模块作为Maven依赖项添加到您希望使用它们的模块的POM.xml文件中。

示例:

    <dependency>
        <groupId>com.test</groupId>
        <artifactId>test-infra</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

解决方案非常容易,但发现它有点累人。我希望它能帮助其他人解决同样的问题。

答案 1 :(得分:0)

您可以通过导入其他maven项目bean上下文表单类路径来执行此操作:

this->AppendHeader("Content-Range", "bytes " + offset "-" + (offset + part_size - 1) "/" + file_size);

然后,您可以使用实际maven项目中其他maven项目上下文中定义的所有bean