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

Я использую Spring для ввода beans. И я использую аннотации для аннотирования методов bean (Security, TransactionManagement, ExceptionHanling, Logging). Проблема заключается в следующем:

Я хочу создать 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)

Ответы

Ответ 2

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

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

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