场景如下:
bean都由spring管理,在某个业务里需要启动新的线程去完成通讯的工作,在线程中根据通讯返回的状态作更改,这时需要在线程中用到某个业务bean,但是使用常规的@Resource无法注入。。。(查了查说是spring因为考虑到线程安全问题,不支持注入)
如果是web应用,可以直接通过classLoader拿到context实例,获取bean
public class SpringBeanUtil {
private static ApplicationContext applicationContext;
public static <T> T getBean(Class<T> clazz, String beanName) {
ApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
if (context == null) {
context = applicationContext;
}
return (T) context.getBean(beanName);
}
public static void setApplicationContext(ApplicationContext applicationContext) {
SpringBeanUtil.applicationContext = applicationContext;
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。