【问题标题】:ComponentScan and Autowired not working for dependent Spring project?ComponentScan 和 Autowired 不适用于依赖 Spring 项目?
【发布时间】:2016-05-19 23:32:22
【问题描述】:

我有两个项目 A 和 B。两个项目都是用 Maven 构建的,项目 A 对项目 B 有 Maven 依赖项。两个项目都有一个带有 @Configuration 注释的类,我在其中定义了 @Beans。

我在项目 A 中都有 bean,来自两个项目。如果我在同一项目中定义的 bean 的项目 A 中使用 @Autowired 注释,则自动装配工作。但是,如果我在项目 B 的一个 bean 的项目 A 中使用 @Autowired 注解,我会得到一个异常。

这是什么意思?如何在项目 B 中自动装配项目 A 中的 bean?

【问题讨论】:

  • 有什么异常?您是否在项目 A pom 文件中将项目 B 列为依赖项?项目 B 的 jar 文件是否在项目 A 的类路径中?

标签: spring spring-boot autowired component-scan


【解决方案1】:

这通常是 ComponentScan 上的基类路径的问题。

例如,如果您有以下基础包

com.myproject.a

com.myproject.b

分别在您的项目 A 和 B 中,并且您正在将 SpringBoot 与主类一起使用

package com.myproject.a

@Configuration 
@EnableAutoConfiguration 
@ComponentScan
class MyApp {
    // Some public static void main ... 
}

它只会在包 com.myproject.a 中找到您的类,并且它是子类。

要解决此问题,您必须增强 @ComponentScan 以扫描两种包结构,例如。

package com.myproject.a

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = {"com.myproject.a", "com.myproject.b"} 
// or basePackages = "com.myproject" in this example
class MyApp {
    // Some public static void main ... 
}

【讨论】:

  • 嗯,但问题是我在项目 A 和 B 中分别有单独的 @Configuration 类和 bean。因此,两个项目扫描仪都应该扫描 bean。问题是当我尝试从项目 A 中的项目 B 中自动装配一个 bean 时,它说它找不到该 bean。在您的解决方案中,我想我不会在项目 B 中定义任何 bean,只在项目 A 中?
  • 嗨,很抱歉不清楚这一点。您有一个启动扫描过程的项目。在您的情况下,项目 A。此初始扫描程序需要了解要扫描的包树。这使他能够在包树中找到所有 @Configuration 类。我希望这能更清楚一点
  • 感谢您的澄清 :) 我以为涉及两个单独的扫描仪,但现在我明白了。谢谢!
  • 在我的情况下,项目 A 不知道项目 B,那么如何处理这种情况。项目是提供者,项目 B 是消费者,所以消费者可以是任何人。
猜你喜欢
  • 2019-04-09
  • 2015-06-28
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2018-01-11
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多