【问题标题】:ApplicationContextaware worksApplicationContextaware 工作
【发布时间】:2012-04-12 17:13:25
【问题描述】:

我需要知道 applicatoncontextaware 是如何工作的。我有 applicationContext.xml,它有一些导入资源(另一个 applicationContext)。我需要在我的 java 类中使用 applicationContext.xml 来使用其中的 spring bean。

我知道了用于获取 java 类中的 spring bean 的 applicationcontextaware 类。Applicationaware 具有 set 和 getapplicationcontext() 方法。 getapplicationcontext() 被定义为静态的。

applicationContextware如何加载applicationContext.xml?我是否需要提供 applicationContext.xml 的位置以便加载 applicationcontextaware?如何在我的 java 类中使用它?

【问题讨论】:

  • 我创建了ApplicationContextProvider,它实现了应用上下文感知。我在 applicationContext.xml 中将其定义为
  • 我个人在一个混合企业应用程序中使用过它,该应用程序最初是基于 struts 构建的;但最近我们已经开始介绍 spring bean 和 context。这里我们不使用 web.xml 加载应用程序上下文,而是使用 ApplicationContextAware

标签: spring applicationcontext


【解决方案1】:

您混淆了一些事情。首先我们在谈论ApplicationContextAware 类,对吧?它只有一种方法:

setApplicationContext(ApplicationContext applicationContext)

你通常是这样实现的:

public class MyFancyBean implements ApplicationContextAware {

  private ApplicationContext applicationContext;

  void setApplicationContext(ApplicationContext applicationContext) {
    this.applicationContext = applicationContext;
  }

  public void businessMethod() {
    //use applicationContext somehow
  }

}

但是您很少需要直接访问ApplicationContext。通常你启动它一次,然后让 bean 自动填充自己。

我需要在我的 java 类中使用 applicationContext.xml 来使用其中的 spring bean。

给你:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

请注意,您不必提及 applicationContext.xml 中已包含的文件。现在您可以简单地按名称或类型获取一个 bean:

ctx.getBean("someName")

请注意,有很多方法可以启动 Spring - 使用 ContextLoaderListener@Configuration 类等。

【讨论】:

  • 我怀疑我们是否像这样加载应用程序上下文 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");那么应用上下文感知的目的是什么?
  • @ramya:好吧,你告诉我:-)。正如我所说,它很少需要,大多数时候你的 bean 都没有像这样的 Spring 依赖项。
  • 如果 Spring 不能直接控制您的整个应用程序,您可能需要它,例如,如果您在应用程序服务器实例中运行 Spring,但您希望将两者的实例绑定在一起。从 ApplicationContextAware javadoc 中,他们列出了许多其他可能性,但也为您提供了首选的替代方案,即除非您绝对不能使用 XML / Annotations 配置,否则您不应该直接从上下文中获取。
猜你喜欢
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 2016-03-26
  • 2015-11-15
相关资源
最近更新 更多