首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ApplicationContextAware在Spring中是如何工作的?

ApplicationContextAware在Spring中是如何工作的?
EN

Stack Overflow用户
提问于 2014-02-04 20:52:42
回答 2查看 113.2K关注 0票数 87

在spring中,如果bean实现了ApplicationContextAware,那么它就能够访问applicationContext。因此,它能够获得其他bean。例如:

代码语言:javascript
复制
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;     

    public void setApplicationContext(ApplicationContext context) throws BeansException {
      applicationContext = context;
    }

    public static ApplicationContext getApplicationContext() {
      return applicationContext;
    }
}

然后,SpringContextUtil.getApplicationContext.getBean("name")可以获得bean "name“。

要做到这一点,我们应该将这个SpringContextUtil放在applications.xml中,例如

代码语言:javascript
复制
<bean class="com.util.SpringContextUtil" />

在这里,bean SpringContextUtil没有包含属性applicationContext。我猜当spring bean初始化时,这个属性就被设置了。但是如何做到这一点呢?如何调用setApplicationContext方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-04 21:02:38

当spring实例化beans时,它会寻找一些接口,比如ApplicationContextAwareInitializingBean。如果找到它们,则调用这些方法。例如(非常简单)

代码语言:javascript
复制
Class<?> beanClass = beanDefinition.getClass();
Object bean = beanClass.newInstance();
if (bean instanceof ApplicationContextAware) {
    ((ApplicationContextAware) bean).setApplicationContext(ctx);
}

请注意,在较新的版本中,使用注释可能比实现特定于spring的接口更好。现在您可以简单地使用:

代码语言:javascript
复制
@Inject // or @Autowired
private ApplicationContext ctx;
票数 105
EN

Stack Overflow用户

发布于 2016-07-29 15:52:42

ApplicationContextAware接口,当前应用程序上下文,您可以通过它调用spring容器服务。我们可以通过类中的以下方法获得当前注入的applicationContext实例

代码语言:javascript
复制
public void setApplicationContext(ApplicationContext context) throws BeansException.
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21553120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档