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

Posted

技术标签:

【中文标题】从任何地方访问 spring 应用程序上下文【英文标题】:Access spring application context from everywhere 【发布时间】:2017-07-23 08:51:04 【问题描述】:

假设我有一个 app-context.xml 来加载我的 bean 和类似的东西。现在如果我想使用一个bean,我需要做这些步骤:

ApplicationContext context = new ClassPathXmlApplicationContext("app-context.xml");
MailService ms = (MailService) context.getBean("mailService");
// use MailService

我怎样才能跳过这些步骤,因为我不想在每次发送邮件时加载上下文、实例化它、将 bean 转换为我的服务。

另一个问题。为什么加载 XML bean 定义要花那么多时间? 我在 XML 中有 2 个 bean,加载大约需要 2-3-4 分钟。 PC 很好,在其他应用程序中它可以在几秒钟内加载。

【问题讨论】:

它是什么样的应用程序,是spring boot还是基于maven的项目。您在应用程序中维护了多少上下文?在回答您的问题之前,有几个问题要问。为什么不使用 spring 框架的自动装配功能? Spring boot 应用程序,我只有 1 个上下文用于测试目的。我无法自动装配它(尽管如果我能这样做我会很高兴),因为它说“无法自动装配,没有找到 MailService 类型的 bean”。 您可以使用@ImportResource 将所需的bean 加载到启动容器以测试资源并使用@Autowiring 我是否在我的“主”类上使用@ImportResource?然后我可以在我的例如 RestController 中使用@Autowire? 是的,你可以这样做,我希望主类是指用@SprinBootApplication注释的类。 【参考方案1】:

使用@ImportResource 从配置文件中加载bean。

http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ImportResource.html

【讨论】:

以上是关于从任何地方访问 spring 应用程序上下文的主要内容,如果未能解决你的问题,请参考以下文章

如何防止特定组访问某些 Spring 应用程序上下文文件?

从数据库加载spring boot app属性

从 Spring Cloud Function 访问 AWS Lambda 上下文

获取 Spring 应用程序上下文

Python协程实践

Python协程实践