Получите реальный Объект класса для боба Spring

Я использую Spring для введения бобов. И я использую некоторые аннотации для аннотирования бобовых методов (безопасность, TransactionManagement, ExceptionHanling, Регистрируясь). Проблема:

Я хочу создать тест JUnit, чтобы проверить, забыл ли я, аннотируют некоторые методы. Но Spring возвращает класс $ProxyXXX без любых аннотаций на методы..

Method[] methods = logic.getClass().getMethods();

  for (Method method : methods) {
     Annotation[] annotations = method.getAnnotations();   // empty array!

Как я могу получить аннотации для метода или получить реальный объект класса?

P.S. Spring 2.5.6, JDKDynamicProxy (не CGLib)

23
задан skaffman 18 February 2010 в 19:56
поделиться

2 ответа

Прокси на основе интерфейса Spring реализуют TargetClassAware.

29
ответ дан 29 November 2019 в 01:02
поделиться

Вы можете преобразовать прокси-объект, чтобы получить объект и класс, для которого он действует как прокси (см. TargetSource ):

Advised advised = (Advised) proxy;
Class<?> cls = advised.getTargetSource().getTargetClass();

Как правило, вы должны следовать принципам Spring и продолжать получать правильный класс как можно ненавязчивее. Это означает, что как можно меньше классов должно зависеть от API-интерфейсов Spring Framework (возможно, добавить реализацию ClassLocator и SpringProxyClassLocator).

17
ответ дан 29 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: