Я столкнулся с этой проблемой, пытаясь выполнить аутроверку класса runnable и создать разные экземпляры его в разных вызовах и сохранить его в массиве.
xml:
<bean name="threadName" Class="ABC" scope="prototype" />
В моем коде я пробую что-то вроде этого:
public class ThreadHandler{
@Autowired
private ABC threadName;
//getter
ABC getThreadName(){
     return threadName;
}
public void someFunction(){
     List<ABC> abc = new ArrayList(ABC>();
     for (int i=0;i<SOME_CONST;i++){
          ABC tName = getThreadName();
          abc.add(tName);
          tName.start();
      }
}   
}
Пусть ABC - класс, который является Thread/Runnable/Callable.
Таким образом, он выбрасывает java.lang.IllegalThreadStateException.
Но, он отлично работает, если я использую ABC tName =appContext.getBean("threadName",ABC.class);
Почему это происходит?
Разве мы не получаем новый экземпляр при попытке получить объект из метода getMethod?