-
Spring中通过ApplicationContextAware的实现类获得的ApplicationContext是线程安全的吗?5
项目中我需要根据登陆用户动态修改Spring的数据源配置,即通过实现ApplicationContextAware接口来获取ApplicationContext,并将用户对应的数据源bean覆盖这个ApplicationContext的数据源bean。在多线程的情况下,是否会发生同步问题?Spring是否做到了每个线程持有独立的一份ApplicationContext,或者说我通过实现ApplicationContextAware而获得的ApplicationContext是否经过了ThreadLocal的封装优化?2012年9月24日 15:37
2个答案 按时间排序 按投票排序
-
采纳的答案
ApplicationContextAware 在容器初始化完成后将ApplicationContext注入, 如果你只读ApplicationContext 肯定是线程安全的。
2012年9月24日 15:44
-
是安全的,可参考
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
相关推荐
4. **ApplicationContextAware**:让线程处理类实现`ApplicationContextAware`接口,Spring会在启动时自动为其注入`ApplicationContext`。然后,可以通过`ApplicationContext`的`getBean()`方法来获取所需的bean。...
可以创建一个帮助类,实现ApplicationContextAware接口,并在其中保存Spring ApplicationContext。然后,在需要使用service的地方,可以使用该帮助类来获取对应的bean。 在帮助类中,我们可以使用静态变量来保存...
今天,我们来讨论Spring框架中如何通过ApplicationContext主动获取bean的方法。这个问题在实际开发中非常常见,特别是在异步线程或某些特殊情况下无法使用AutoWired和Component注解时,就需要使用ApplicationContext...
首先,在`spring-context.xml`中添加一个名为`ApplicationContextUtil`的Bean,该Bean用于实现`ApplicationContextAware`接口,以便Spring容器能够自动注入`ApplicationContext`。 ```xml ``` ##### 2. 实现`...
这样,我们可以通过 Spring 的 ApplicationContext 获取该线程类的实例。 首先,我们需要定义一个获取 Spring Context 的类,例如: ```java @Component public class ApplicationContextProvider implements ...
通过上面的示例,我们可以看到,使用 Spring Boot 中的多线程处理任务是非常简单的,只需要定义一个获取 Spring 上下文的类,并使用原型作用域的多线程类就可以了。 需要注意的是,在 Spring Boot 项目中,多线程...
总之,Spring Boot通过`ApplicationContextAware`接口和相关的工具类,使得在多线程环境中获取和使用bean变得简单易行,避免了手动管理bean实例的问题,保证了代码的整洁和可维护性。同时,这种方式也确保了bean的...
请注意,`Timer`并不是线程安全的,如果需要处理多个并发任务,建议使用`ScheduledExecutorService`,它是Spring `@Scheduled`注解背后的实际实现。 总结,Spring中使用`Timer`和`TimerTask`来实现精确时间运行的...
Spring 多线程下注入 Bean 问题详解 在 Spring 框架中,多线程下注入 Bean 是一个常见的问题。...Spring 多线程下注入 Bean 问题可以通过构造函数传递 Service 或者使用 `ApplicationContext` 获取 Bean 来解决。
任何实现了`ApplicationContextAware`接口的对象都将拥有一个额外的`app_context`属性,这个属性指向当前的`ApplicationContext`对象,从而使得这些对象可以访问到容器本身。 **示例代码**: ```python from spring...
- 在Action类中,注入Spring管理的Service Bean,这通常通过实现Spring的`ApplicationContextAware`接口或使用Struts的Spring插件来完成。 3. **Spring与Struts的整合**: - 使用Struts的Spring插件(struts2-...
Spring提供了`ContextLoader`和`WebApplicationContextUtils`等工具类,可以从当前线程或ServletContext中获取ApplicationContext。 ```java // 在非Web应用中 ApplicationContext ac = ContextLoader....
在Spring应用中,监听器可以通过实现特定接口或者通过配置XML来定义,它们能够帮助开发者在应用程序的生命周期中执行特定的任务,例如初始化、销毁bean,或者监控应用状态等。以下是关于Spring监听器的详细知识点: ...
在 SpringBoot 多线程处理任务中无法使用 @Autowired 注入 bean 的问题,可以通过创建一个工具类来解决,这个工具类可以用于获取 bean 对象,从而解决多线程处理任务中无法使用 @Autowired 注入 bean 的问题。
Spring框架中的Bean生命周期管理是其核心功能之一,它通过一系列的接口和类来实现对Bean的创建、初始化、销毁等过程的控制。以下是Spring中Bean生命周期管理的关键概念: 1. **BeanPostProcessor**:这是Spring容器...
1. **Servlet**: 可以在Servlet的init()方法中,通过ApplicationContextAware接口获取Spring上下文,然后手动从上下文中获取依赖的bean。 2. **Filter**: 同样,可以在Filter的init()方法中获取ApplicationContext...
本文将详细介绍如何通过监听器获取Spring配置文件中的bean,以及几种实现方式的优劣分析。 首先,我们需要创建一个监听器来执行这些初始化任务。这里创建了一个名为`InitDataListener`的类,它继承自`...
1. **ApplicationContextAware接口**:这是Spring提供的一个回调接口,当Bean被Spring容器管理后,Spring会自动调用`setApplicationContext`方法,将当前ApplicationContext注入到Bean中。这使得Bean能够获取到...
实现自动刷新的核心思想是通过定时任务不断检测XML文件的变化,并将变化同步到Spring的ApplicationContext中。具体步骤如下: 1. **从上下文容器获取SqlSessionFactory**: ```java SqlSessionFactory ...
2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .....................