Попытка выяснить, как прокси-сервер моей бобы с советами АОП аннотированным способом.spring 3 AOP anotated советует
У меня есть простой класс
@Service
public class RestSampleDao {
@MonitorTimer
public Collection<User> getUsers(){
....
return users;
}
}
Я создал пользовательскую аннотацию для контроля времени выполнения
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface MonitorTimer {
}
и советуют сделать некоторый поддельному мониторинг
public class MonitorTimerAdvice implements MethodInterceptor {
public Object invoke(MethodInvocation invocation) throws Throwable{
try {
long start = System.currentTimeMillis();
Object retVal = invocation.proceed();
long end = System.currentTimeMillis();
long differenceMs = end - start;
System.out.println("\ncall took " + differenceMs + " ms ");
return retVal;
} catch(Throwable t){
System.out.println("\nerror occured");
throw t;
}
}
}
теперь я могу использовать это если я вручную прокси экземпляр дао, как это
AnnotationMatchingPointcut pc = new AnnotationMatchingPointcut(null, MonitorTimer.class);
Advisor advisor = new DefaultPointcutAdvisor(pc, new MonitorTimerAdvice());
ProxyFactory pf = new ProxyFactory();
pf.setTarget(sampleDao);
pf.addAdvisor(advisor);
RestSampleDao proxy = (RestSampleDao) pf.getProxy();
mv.addObject(proxy.getUsers());
но как установить его весной, чтобы мои пользовательские аннотированные методы автоматически проксировались этим перехватчиком? я хотел бы ввести прокси-файл samepleDao вместо реального. Можно ли это сделать без xml-конфигураций?
Я думаю, должно быть возможно просто комментировать методы, которые я хочу перехватить, и весна DI будет прокси-сервером, что необходимо.
или мне нужно использовать aspectj для этого? предпочтительнее простейшее решение: -)
благодарит за помощь!
спасибо, что решить эту проблему: -) – Art79