Spring: использование «инъекции метода Lookup» для моей ThreadFactory выглядит не масштабируемым - PullRequest
1 голос
/ 18 марта 2010

Мы создаем ThreadFactory, поэтому каждый раз, когда одноэлементному контроллеру требуется новый поток, я каждый раз получаю новый экземпляр.

Глядя на Внедрение метода Lookup выглядит хорошо, но что, если у нас есть несколько классов потоков? Мне нравится тот факт, что я могу автоматически подключать свои threadBeans.

как:

public abstract class ThreadManager {
        public abstract Thread createThreadA();
        public abstract Thread createThreadB();
}

и конфиг:

<bean id="threadManager" class="bla.ThreadManager" singleton="true">
    <lookup-method name="createThreadA" bean="threadA" />
    <lookup-method name="createThreadB" bean="threadB"/>
</bean>
<!-- Yes! i can autowire now :)-->
<bean id="threadA" class="bla.ThreadA" singleton="false" autowire="byType">
<bean id="threadB" class="bla.ThreadB" singleton="false" autowire="byType">

и использование:

threadManager.createThreadA();

Вопрос : Я не хочу создавать абстрактный метод «создания» для каждого нового класса потока.

Можно ли сделать этот тип как:

threadManager.createThread(ThreadA.class);

Я также посмотрел на ServiceLocatorFactoryBean, но для нескольких классов мне нужно передать имя компонента (не тип safe). Спасибо

1 Ответ

1 голос
/ 18 марта 2010

Я не думаю, что есть способ сделать это автоматически.И если вы не хотите использовать ExecutorService, как предложено, вы можете достичь этого вручную, если это такая проблема для вас (но я не думаю, что это так)

  • заставить ваш threadManager реализовать ApplicationContextAware или BeanFactoryAware, получая, таким образом, фабрику контекста приложения / фабрику компонентов
  • в вашем методе createThread(..), используя контекст / фабрику, полученные выше, чтобы получить экземпляр компонента потокачто должно быть в объеме prototype конечно)
...