多线程中注入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共享;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值