1. 程式人生 > >多執行緒中注入javabean

多執行緒中注入javabean

spring的javabean在註冊後是單例模式,對於多執行緒中來講並不是太好。但是執行緒中或多或少都需要呼叫一些service之類的bean。總結了下,有如下可以線上程中注入bean的方法。

注意:需要十分小心bean的全域性變數,否則會有執行緒安全問題;

1.使用靜態方法直接獲取spring容器中的bean物件;

示例程式碼:

package demos.multiThreadDemo.untils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.ApplicationContextAware; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.Locale; /** * <code>SpringContextUtil</code> * * @author zhuan.liu 17-1-14 * @version 1.0 */ public class SpringContextUtil implements ApplicationContextAware { private
static ApplicationContext context = null; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { ApplicationContext act = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); context = act; } static { ApplicationContext act = new
ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); context = act; } public static <T> T getBean(String beanName) { try { return (T) context.getBean(beanName); } catch (Exception e) { System.out.println("SpringContextUtil" + e); } return (T) context.getBean(beanName); } public static String getMessage(String key) { return context.getMessage(key, null, Locale.getDefault()); } }

缺點:工程中的spring配置比較多,會出現bean註冊不全或是衝突的情況,這個時候除錯就顯得比較繁瑣;

2.設定執行緒區域性變數,傳入springbean;

3.將執行緒bean化;

4.ThreadLocal共享;