在Runnable线程中访问Spring bean

Ran*_*aul 7 java spring multithreading spring-mvc executorservice

我需要在下面的Runnable Thread中访问Spring bean(featureServiceuxService),但是我得到了null值,applicationContext因此我无法在Runnable中获得Spring bean.我想知道是否可以访问runnable中的spring bean?如果没有,请建议我另一种方法.

我正在使用Spring 4.0.6Java 8

@Component
public class UserMenuUpdateTask implements Runnable, Serializable, ApplicationContextAware {


    private static final long    serialVersionUID = 3336518785505658027L;

    List<User>                   userNamesList;

    FeatureService               featureService;

    UXService uxService;

    private ApplicationContext   applicationContext;

    public UserMegaMenuUpdateTask() {}

    public UserMegaMenuUpdateTask(List<User> userNamesList) {
        this.userNamesList = userNamesList;
    }

    @Override
    public void run() {
        try {
            for (User user : userNamesList) {

                    featureService = (FeatureService) applicationContext.getBean("featureService");
                    uxService = (UxService) applicationContext.getBean("uxService");                    
                //.........
            }
        } catch (BaseApplicationException ex) {
            throw new BaseApplicationException(ex);
        }
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;

    }
}
Run Code Online (Sandbox Code Playgroud)

我打电话给runnable如下

ExecutorService es = Executors.newCachedThreadPool();
es.execute(new UserMenuUpdateTask(activeUsers));
Run Code Online (Sandbox Code Playgroud)

Pet*_*der 1

Spring 使用ThreadLocal来存储,applicationContext但 ExecutorService 创建一个不同的线程,其中没有管理任何 bean 和/或 beanContext 找不到任何 bean。

请按照此说明进行操作。