不同项目中的应用程序上下文空且无法访问bean

Posted

技术标签:

【中文标题】不同项目中的应用程序上下文空且无法访问bean【英文标题】:Application Context Null in different project and unable to access beans 【发布时间】:2018-02-17 23:40:28 【问题描述】:

我有一个项目 (project1),其中包含使用 @component 声明的 bean,并且使用应用程序上下文我能够访问这些 bean。现在有另一个项目(spring boot project-project2),我使用这个project1作为依赖项。 我正在尝试使用自动装配注释访问 project1 的 bean,但它为 bean 和应用程序上下文抛出空指针异常。如何访问 project1 的应用程序上下文,它可以访问我的项目中的这些 bean,以便我可以使用自动装配的应用程序上下文和访问 project2 中 project1 的 bean 知道出了什么问题以及为什么自动装配不起作用。

谢谢

【问题讨论】:

两个项目包是否都配置为在 project1 中扫描? (@ComponentScan) @ComponentScan 是在 project1 的类上的注释。还需要在哪里声明?我需要在 project2 中使用 project1 bean 那么在 project2 中的 componentscan 注解必须同时具有 project2 和 project1 基础包。就像 project2 有基础包 "a.b.c" 并且 project1 有 x.y.z project2 componentscan 注释必须是 @ComponentScan(basePackages="a.b.c","x.y.z") 设置了这些值,但仍然无法获取 bean 我需要在 post 构造方法中获取 bean。它在那里工作正常。 【参考方案1】:

您需要将项目 1 中的配置导入项目 2。如下所示

@Configuration
@EnableBatchProcessing
@ComponentScan("abc.","com.abc")
@Import(Project1Config.class)
public class Project2Configuration 

【讨论】:

以上是关于不同项目中的应用程序上下文空且无法访问bean的主要内容,如果未能解决你的问题,请参考以下文章

从任何地方访问 spring 应用程序上下文

Web 应用程序上下文层次结构中的 Spring bean 范围

如何从我的 ASP.NET Core 5 Web 应用程序中的 SignalR 操作中解决错误“无法访问已释放的上下文实例”?

无法访问 Windows 窗体应用程序中的 ConfigurationManager.AppSettings

无法通过单元测试中的 Sitecore 上下文访问 Sitecore 模拟项目(MS Fakes)

Spring应用上下文中Bean的生命周期