Возможно ли иметь аспект вокруг других аспектов - PullRequest
1 голос
/ 12 июля 2011

мой вопрос связан с этим вопросом

У нас есть другой класс аспектов, который дает @around рекомендации для разных частей приложения (толстый клиент в Swing) для измерения времени выполнения.

У меня есть еще один аспект (ExceptionHandler), который делает @around для всех методов аспектов, которые я написал.

Я сделал это, чтобы избежать того, что созданные аспекты вызовут исключение и приведут к сбою клиентского приложения. В общем, я пытаюсь поймать Proceed моего другого метода @around и просто регистрирую возникающие исключения. Я выкидываю исключение только тогда, когда обнаруживаю, что оно исходит от исходной точки JoinPoint

if (joinPoint.getSignature().getDeclaringTypeName().equalsIgnoreCase("org.aspectj.lang.ProceedingJoinPoint")) {
            throw exception;
        }

Допустимо ли это делать?

В Eclipse с AJDT приложение работает нормально, и я протестировал ExceptionHandler, и он работал как положено.

Но в других условиях. (Интеграция) приложение завершается с ошибкой, как только оно встречает строку, рекомендованную ExceptionHandler с этой ошибкой

Exception in thread "main" java.lang.NoSuchMethodError:     com.xxx.yyy.aop.aspect.ExceptionHandlerAspect.aspect
 Of()Lcom/xxx/yyy/aop/aspect/ExceptionHandlerAspect;
    at     com.xxx.yyy.aop.aspect.ecs.AspectBaseEcs.inspectLoginInfo(AspectBaseEcs.java:65)
    at com.xxx.yyy.app.es.security.Security.loadApplications(Security.java:172)
    at com.xxx.yyy.app.es.gui.VSDlgLogin.loadSecurity(VSDlgLogin.java:346)
    at com.xxx.yyy.app.es.ApplicationSuite.start(ApplicationSuite.java:839)
    at com.xxx.yyy.app.es.ApplicationSuite.main(ApplicationSuite.java:501)

Я также декомпилировал код, чтобы увидеть, был ли aspectOf () встроен в мой ExceptionHandler и есть ли метод !!!!!!! ???????????

Почему эта ошибка возникает ...?

Я невежественен.

1 Ответ

0 голосов
/ 23 августа 2011

Наконец-то нашел проблему. Наше приложение зависело от общего модуля jar, который также содержал аспект.

Базовое имя пакета было одинаковым: com.xxx.aop, а базовый класс, который мы использовали для наших аспектов, был одним и тем же именем !!!! Итак, 2 com.xxx.aop.AspectBase.class были загружены.

Поскольку мы использовали флаг в нашем файле компоновки муравья, чтобы включить переплетение времени компиляции со значением yes / no, один из наших классов AspectBase.class не был соткан, а другой -.

Не могу поверить, что я этого раньше не видел !!!!!

...