0 0

Spring中通过ApplicationContextAware的实现类获得的ApplicationContext是线程安全的吗?5

项目中我需要根据登陆用户动态修改Spring的数据源配置,即通过实现ApplicationContextAware接口来获取ApplicationContext,并将用户对应的数据源bean覆盖这个ApplicationContext的数据源bean。在多线程的情况下,是否会发生同步问题?Spring是否做到了每个线程持有独立的一份ApplicationContext,或者说我通过实现ApplicationContextAware而获得的ApplicationContext是否经过了ThreadLocal的封装优化?
2012年9月24日 15:37

2个答案 按时间排序 按投票排序

0 0

采纳的答案

ApplicationContextAware 在容器初始化完成后将ApplicationContext注入, 如果你只读ApplicationContext 肯定是线程安全的。

2012年9月24日 15:44
0 0

是安全的,可参考
http://blog.csdn.net/zhouwubin123/article/details/6929233
public static void setApplicationContext(ApplicationContext applicationContext) {
  synchronized (ContextUtils.class) {
   log.debug("setApplicationContext, notifyAll");
   ContextUtils.applicationContext = applicationContext;
   ContextUtils.class.notifyAll();
  }
}
貌似有同步控制

2012年9月24日 16:01

相关推荐

    线程中获取spring 注解bean

    4. **ApplicationContextAware**:让线程处理类实现`ApplicationContextAware`接口,Spring会在启动时自动为其注入`ApplicationContext`。然后,可以通过`ApplicationContext`的`getBean()`方法来获取所需的bean。...

    多线程Autowire注入null的解决方案.docx

    可以创建一个帮助类,实现ApplicationContextAware接口,并在其中保存Spring ApplicationContext。然后,在需要使用service的地方,可以使用该帮助类来获取对应的bean。 在帮助类中,我们可以使用静态变量来保存...

    Spring通过ApplicationContext主动获取bean的方法讲解

    今天,我们来讨论Spring框架中如何通过ApplicationContext主动获取bean的方法。这个问题在实际开发中非常常见,特别是在异步线程或某些特殊情况下无法使用AutoWired和Component注解时,就需要使用ApplicationContext...

    获取Spring容器

    首先,在`spring-context.xml`中添加一个名为`ApplicationContextUtil`的Bean,该Bean用于实现`ApplicationContextAware`接口,以便Spring容器能够自动注入`ApplicationContext`。 ```xml ``` ##### 2. 实现`...

    Spring-Boot中如何使用多线程处理任务方法

    这样,我们可以通过 Spring 的 ApplicationContext 获取该线程类的实例。 首先,我们需要定义一个获取 Spring Context 的类,例如: ```java @Component public class ApplicationContextProvider implements ...

    详解Spring-Boot中如何使用多线程处理任务

    通过上面的示例,我们可以看到,使用 Spring Boot 中的多线程处理任务是非常简单的,只需要定义一个获取 Spring 上下文的类,并使用原型作用域的多线程类就可以了。 需要注意的是,在 Spring Boot 项目中,多线程...

    Springboot实现多线程注入bean的工具类操作

    总之,Spring Boot通过`ApplicationContextAware`接口和相关的工具类,使得在多线程环境中获取和使用bean变得简单易行,避免了手动管理bean实例的问题,保证了代码的整洁和可维护性。同时,这种方式也确保了bean的...

    Spring使用timer定时器-能精确几点运行定时任务

    请注意,`Timer`并不是线程安全的,如果需要处理多个并发任务,建议使用`ScheduledExecutorService`,它是Spring `@Scheduled`注解背后的实际实现。 总结,Spring中使用`Timer`和`TimerTask`来实现精确时间运行的...

    Spring 多线程下注入bean问题详解

    Spring 多线程下注入 Bean 问题详解 在 Spring 框架中,多线程下注入 Bean 是一个常见的问题。...Spring 多线程下注入 Bean 问题可以通过构造函数传递 Service 或者使用 `ApplicationContext` 获取 Bean 来解决。

    SpringPython使用介绍指南.doc

    任何实现了`ApplicationContextAware`接口的对象都将拥有一个额外的`app_context`属性,这个属性指向当前的`ApplicationContext`对象,从而使得这些对象可以访问到容器本身。 **示例代码**: ```python from spring...

    spring与struts集成方案二

    - 在Action类中,注入Spring管理的Service Bean,这通常通过实现Spring的`ApplicationContextAware`接口或使用Struts的Spring插件来完成。 3. **Spring与Struts的整合**: - 使用Struts的Spring插件(struts2-...

    Java获取Bean的几种方式.pdf

    Spring提供了`ContextLoader`和`WebApplicationContextUtils`等工具类,可以从当前线程或ServletContext中获取ApplicationContext。 ```java // 在非Web应用中 ApplicationContext ac = ContextLoader....

    spring监听器共20页.pdf.zip

    在Spring应用中,监听器可以通过实现特定接口或者通过配置XML来定义,它们能够帮助开发者在应用程序的生命周期中执行特定的任务,例如初始化、销毁bean,或者监控应用状态等。以下是关于Spring监听器的详细知识点: ...

    详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决

    在 SpringBoot 多线程处理任务中无法使用 @Autowired 注入 bean 的问题,可以通过创建一个工具类来解决,这个工具类可以用于获取 bean 对象,从而解决多线程处理任务中无法使用 @Autowired 注入 bean 的问题。

    spring学习笔记2

    Spring框架中的Bean生命周期管理是其核心功能之一,它通过一系列的接口和类来实现对Bean的创建、初始化、销毁等过程的控制。以下是Spring中Bean生命周期管理的关键概念: 1. **BeanPostProcessor**:这是Spring容器...

    特殊情况(ActionForm,Servlet, Filter, Listener)下Spring如何注入对象

    1. **Servlet**: 可以在Servlet的init()方法中,通过ApplicationContextAware接口获取Spring上下文,然后手动从上下文中获取依赖的bean。 2. **Filter**: 同样,可以在Filter的init()方法中获取ApplicationContext...

    监听器获取Spring配置文件的方法

    本文将详细介绍如何通过监听器获取Spring配置文件中的bean,以及几种实现方式的优劣分析。 首先,我们需要创建一个监听器来执行这些初始化任务。这里创建了一个名为`InitDataListener`的类,它继承自`...

    spring动态bean注册示例分享

    1. **ApplicationContextAware接口**:这是Spring提供的一个回调接口,当Bean被Spring容器管理后,Spring会自动调用`setApplicationContext`方法,将当前ApplicationContext注入到Bean中。这使得Bean能够获取到...

    SpringBoot自动刷新MybatisXM实战

    实现自动刷新的核心思想是通过定时任务不断检测XML文件的变化,并将变化同步到Spring的ApplicationContext中。具体步骤如下: 1. **从上下文容器获取SqlSessionFactory**: ```java SqlSessionFactory ...

    JAVA核心知识点整理(有效)

    2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .....................

Global site tag (gtag.js) - Google Analytics