Spring 应用程序不会在包外启动



我正在按照本教程使用 Spring 构建一个基本应用程序。只要我遵循以下子目录结构,它就可以完美运行:

└── src
    └── main
        └── java
            └── hello

如果我将Application.javaScheduledTasks.java类移出hello包,则会出现以下错误:

** WARNING ** : Your ApplicationContext is unlikely to start due to a `@ComponentScan` of the default package.

几秒钟后,确实...

java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.context.annotation.AnnotationConfigApplicationContext@71fa8894: startup date [Wed Jan 18 22:19:12 CET 2017]; root of context hierarchy

我的问题是,为什么我需要将我的类放入一个包中?它有什么用?如何避免此错误?如果它是一个非常简单的应用程序,我真的需要使用包吗?

再次将 Java 文件放入hello包中。

当类不包含包声明时,它被视为在"默认包"中。通常不鼓励使用"默认包",应避免使用。

对于使用@ComponentScan@EntityScan@SpringBootApplication注释的 Spring Boot 应用程序来说,它可能会导致特殊问题,因为每个 jar 中的每个类都会被读取。

在此处阅读更多内容。

我将带有@SpringBootApplication注释的类从默认包移动到特定包,它起作用了。

我创建了一个空白的Maven文件夹,其中Java文件夹是最后一个。我添加了类主应用程序。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

此外,我必须在 Java 文件夹中创建一个包,例如 com.test,然后将我的 MainApplication 类移动到其中。注意"包测试;"现在这个默认包 Spring boot 正在寻找。

package com.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

然后它工作正常。

最新更新