Как создать bean-компонент Spring из статического конструктора внутреннего класса? - PullRequest
7 голосов
/ 29 сентября 2010

Я пытаюсь использовать IoC-контейнер Spring Framework для создания экземпляра класса ThreadPoolExecutor.CallerRunsPolicy .В Java я бы сделал это следующим образом ...

import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
...
RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.CallerRunsPolicy();

Но когда я пытаюсь сделать эквивалент в Spring, он выдает CannotLoadBeanClassException .

<beans>
   <bean class="java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy"/>
</beans>

В более общем смысле: в XML-коде Spring ApplicationContext как можно вызвать конструктор статического внутреннего класса?

Ответы [ 2 ]

13 голосов
/ 29 сентября 2010

Я думаю, что причина этого не в том, что Spring не может понять его как статический внутренний класс. Вероятно, это может работать:

<beans>
   <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy"/>
</beans>
1 голос
/ 29 сентября 2010

Используйте атрибут factory-method :

Следующее определение компонента указывает, что компонент будет создан путем вызова фабричного метода.Определение не указывает тип (класс) возвращаемого объекта, только класс, содержащий фабричный метод.В этом примере метод createInstance () должен быть статическим методом.

<bean id="clientService" class="examples.ClientService"
  factory-method="createInstance"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...