【问题标题】:Spring injecting interface in multi module project多模块项目中的Spring注入接口
【发布时间】:2016-05-18 10:30:43
【问题描述】:

Spring 开发人员的一个问题:

我正在使用 spring 框架进行多模块项目。

模块:

parent(父 maven pom 项目)

all(ear 项目用于从多个模块构建 ear)

目录作为父级

catalog-ejb(实现)

catalog-api(接口)

还有一个 rest 模块依赖于 catalog-api 并使用来自 catalog-api 的自动装配接口。

问题是在部署期间我得到“找不到类型的合格 bean”异常。

api 模块被部署为ear 中的jar 库

ejb 模块被部署为 ejbModule

rest 模块被部署为 webModule (war)。

【问题讨论】:

  • 那么您还没有将您的实现类配置为 Spring bean?那么它就不起作用了,因为 Spring 看不到你的实现类。
  • 哦,我正在使用 spring 4,而我的休息模块有 @ComponentScan(basePackages = {"com.ex.rest", "com.ex.catalog.api"}) 休息模块不能直接看到实现类(这是接口的目的)
  • 发布您的 POM。您必须将实现包作为运行时依赖项包含在内,否则它将不存在。
  • 那你希望Spring如何创建实现类的实例来注入它们?
  • *-all 模块下没有为实现jar定义范围,所以它应该是编译的,实现jar也存在于ear部署中。我不知道spring会如何找到实现,但我认为它应该最终在部署时将所有类部署到同一个jvm。

标签: java spring dependency-injection


【解决方案1】:

实际上ejb模块在ear中打包为ejb有问题。结果是在启动时执行了重复的 webinitializers,导致异常。

Spring 没有找到任何实现,因为 componentscan 已分配给 *.api 包,但实现在 *.ejb 包中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2022-01-24
    • 2018-10-07
    • 2013-07-10
    • 1970-01-01
    • 2016-11-03
    • 2019-05-24
    相关资源
    最近更新 更多