弹簧应用不在包装外启动

2022-08-31 17:47:17

我正在按照本教程使用Spring构建一个基本应用程序。只要我遵循这个子目录结构,它就能完美地工作:

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

如果我将我的和类移出 hello 包,我会收到以下错误:Application.javaScheduledTasks.java

** 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

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


答案 1

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

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

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

在此处阅读更多内容


答案 2

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


推荐