je besoin d'accéder à des grains de printemps (featureService
et uxService
) dans mon Runnable discussion ci-dessous, mais je reçois null
valeur pour applicationContext
donc je ne pourrais pas obtenir les haricots à l'intérieur du printemps Runnable. Je me demande s'il est possible d'accéder à des haricots de printemps à l'intérieur d'un runnable ou non? sinon, veuillez me suggérer une autre approche.Accès beans Spring en fil Runnable
J'utilise Spring 4.0.6
et Java 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;
}
}
J'appelle le runnable comme ci-dessous
ExecutorService es = Executors.newCachedThreadPool();
es.execute(new UserMenuUpdateTask(activeUsers));
Appelez-vous 'setApplicationContext()' avant de l'exécuter? Vous devriez probablement aussi nous montrer comment vous utilisez le Runnable. –
@JiriTousek 'setApplicationContext()' censé être appelé par le conteneur 'Spring' sur l'application démarrer à droite ..? J'ai mis à jour le code pour appeler le Runnable – RanPaul
Seulement sur les haricots (objets) qu'il connaît. Vous créez une instance locale dans votre code que Spring n'a aucun moyen de connaître (Spring n'utilise en fait pas de magie, même si cela semble parfois :) –