Я использую 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)
Прокси на основе интерфейса Spring реализуют TargetClassAware
.
Вы можете преобразовать прокси-объект, чтобы получить объект и класс, для которого он действует как прокси (см. TargetSource ):
Advised advised = (Advised) proxy;
Class<?> cls = advised.getTargetSource().getTargetClass();
Как правило, вы должны следовать принципам Spring и продолжать получать правильный класс как можно ненавязчивее. Это означает, что как можно меньше классов должно зависеть от API-интерфейсов Spring Framework (возможно, добавить реализацию ClassLocator и SpringProxyClassLocator).