【问题标题】:Spring not recognising some @Configuration and @Component classesSpring 无法识别某些 @Configuration 和 @Component 类
【发布时间】:2018-02-26 19:34:19
【问题描述】:

我有 - 或者更确切地说 - 有一个在 IntelliJ 中运行的 Spring 应用程序。它包含几个用@Configuration 注释的类和几个@Component bean。在某些时候,发生了以下情况:

  1. Intelli 开始在代码编辑器中显示错误,指出“无法自动装配。找不到 'xxx' 类型的 bean”。但是有这样的bean用@Component注释。

  2. 未达到特定 @Component bean 的构造函数中的断点。但并非所有@Component bean 都是如此。

  3. 在调试模式下运行时,不会到达某些@Configuration 文件中的断点,即使调试器之前在那里停止。如果使用这些@Component bean 之一自动装配应用程序,它将失败。

  4. 应用程序启动时没有错误,但显然没有调用 @Configuration 类中配置的多个 bean。

包含运行 Spring Boot 应用程序的 main 方法的类标有@SpringBootApplication@Component 与此类位于同一包中的类可被识别并且可以自动装配,甚至可以自动装配到其他包中的类中。

我不知道代码或项目中的任何内容会发生变化。

File -> Project Settings -> Modules 下,在 Spring Application Context 下现在选择了所有 @Configuration 文件。不过这没什么区别。

也尝试过Build -> Rebuild Project

类所在的包没有改变。有没有人见过这样的事情?

谢谢

【问题讨论】:

  • 在这里查看一些代码示例或包结构会很有用。这可能有助于找出问题所在。在大多数情况下,包裹不会被扫描。有趣的是配置和应用程序类

标签: spring spring-boot intellij-idea


【解决方案1】:

如果少数类没有被识别@Component。那么这些类可能不在同一个包下。您一定已经观察到与@SpringBootApplication的Main类在同一包下的类,因为@SpringBootApplication在包上定义了一个自动的@ComponentScan,所以被@Component识别了。

因此,在其他包中定义的其他类无法识别,因为这些类的包中没有 @ComponentScan。

您可以执行以下操作来识别这些类(添加不直接位于@SpringBootApplication 层次结构下的其他包):

@ComponentScan({"com.example.springboot.anything","com.example.springboot.somethingelse"})
@SpringBootApplication
public class AnySpringBootApplication {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2015-11-25
    • 2011-03-19
    相关资源
    最近更新 更多