gpt4 book ai didi

java - ApplicationContextAware 在 Spring 中是如何工作的?

转载 作者:IT老高 更新时间:2023-10-28 13:01:44 24 4
gpt4 key购买 nike

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

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 中,例如

<bean class="com.util.SpringContextUtil" />

这里的 bean SpringContextUtil 不包括属性 applicationContext。我猜当spring bean初始化时,这个属性被设置了。但是这是怎么做到的呢? setApplicationContext 方法是如何被调用的?

最佳答案

当 spring 实例化 bean 时,它会寻找几个接口(interface),例如 ApplicationContextAwareInitializingBean。如果找到它们,则调用方法。例如。 (非常简单)

Class<?> beanClass = beanDefinition.getClass();
Object bean = beanClass.newInstance();
if (bean instanceof ApplicationContextAware) {
((ApplicationContextAware) bean).setApplicationContext(ctx);
}

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

@Inject // or @Autowired
private ApplicationContext ctx;

关于java - ApplicationContextAware 在 Spring 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21553120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com