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