当前位置: 首页 > 知识库问答 >
问题:

ApplicationContextAware在Spring中如何工作?

充小云
2023-03-14

在spring中,如果一个bean实现了ApplicationContextAWare,那么它就能够访问ApplicationContext。因此它能够得到其他的豆子。例如。

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放在applications.xml中,例如。

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

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

共有1个答案

邵伟泽
2023-03-14

spring实例化bean时,它会查找一些接口,如ApplicationContextAWareInitializingBean。如果找到这些方法,则调用这些方法。例如。(非常简化)

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

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

@Inject // or @Autowired
private ApplicationContext ctx;
 类似资料:
  • 问题内容: 在春季,如果实现了bean ,则它可以访问。因此,它能够获得其他豆类。例如 然后可以得到bean的“名称”。 要做到这一点,我们应该把这个里面的,如 这里的bean 不包含属性。我想当spring bean初始化时,就设置了这个属性。但是,这是怎么做的呢?该方法如何调用? 问题答案: 当spring实例化bean时,它会寻找几个接口,例如和。如果找到它们,则将调用这些方法。例如(非常简

  • 问题内容: 我确实在项目中的三个模型对象之间有关系(文章末尾的模型和存储库片段)。 当我调用它时,会触发三个选择查询: (“ sql”) (对我而言)这是非常不正常的行为。据阅读Hibernate文档后所知,它应该始终使用JOIN查询。在类中更改为 查询时(带有附加SELECT 的查询)没有任何区别,而在类更改为 (使用JOIN查询时)则没有变化。 当我使用抑制射击时,有两个选择: 我的目标是在所

  • 我正在尝试在Springmvc中设置OpenSessionInViewInterceptor来修复:org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话。 下面是我已经拥有的代码以及错误的来源。 AppConfig.java featured.jsp ${article.user.isSubscribed()}抛出该错误很可能是因为无法提

  • 考虑这样一种情况:将原型范围的bean注入到单例范围的bean中, 当我们尝试使用单例范围的bean访问原型范围的bean时,每次返回的都是相同的bean,即在单例初始化时注入的bean。 如果我们希望每次使用作用域代理时获得不同的实例。 我不知道这个作用域代理是如何在stage后面工作的,以及它是如何神奇地给我们提供一个新实例的,即使bean存在于单例中。

  • 当我使用通过实现自定义健康信息的“传统方式”时,它会按照预期工作,健康信息会被给定的细节修饰: 问题:要使解决方案工作,还需要配置和/或实现哪些功能? 我的意图不是创建自定义执行器,而是自定义现有的执行器。基于这些文档,我希望达到与实现HealthIndicator相同的结果。我的假设错了吗? Maven配置包含: Spring Boot配置包含:

  • 问题内容: 我当时在从事我的Spring Boot应用程序项目,并注意到,有时到另一个服务器(SQL Server)上的数据库存在连接超时错误。当我尝试执行一些脚本迁移时,这种情况会特别发生,但在尝试几次后仍可以正常工作。 然后我注意到我没有在属性文件中指定 。我做了一些研究,发现建议增加 开发。并将其更改为:生产中。 但是我实际上并不了解它实际上是如何工作的,以及hibernate如何使用或值生