Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AspectJ: вызов метода/конструктора с аннотацией 
V
    Опции темы
MaxPayneC
Дата 12.3.2010, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 5
Всего: 9



Есть аннотация:
Код

package com.vc.museums.aspects.annotations;

import java.lang.annotation.*;

/**
 * Date: 11.03.2010<br />
 * Time: 15:01:25<br />
 *
 * @author maxpayne
 * @version 1.0
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
@Documented
public @interface InvocationLimitation
{
    /**
     *
     * @return
     */
    //String value();
}


Помеченный ей код:
Код

    @InvocationLimitation
    @Override
    public void setNewsDate(Date newsDate) throws FailedOperationException
    {
        System.err.println("setNewsDate() execution");
        if (newsDate == null)
        {
            throw new IllegalArgumentException(globalsBundle.getString("invalidNullArgument"));
        }

        this.newsDate = newsDate;
        this.isStateSynchronized = false;
    }


Аспект:
Код

package com.vc.museums.aspects;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

/**
 * todo class javadoc
 * <p/>
 * Date: 11.03.2010<br />
 * Time: 15:20:21<br />
 *
 * @author maxpayne
 * @version 1.0
 */
@Aspect
public abstract class InvocationLimitationAspect
{
    @Pointcut("call(com.vc.museums.model.entities.information.PieceOfNewsImpl.new(..))")
    //@Pointcut("cflow(execution(com.vc.museums.model.entities.information.PieceOfNewsImpl+.new (..)))")
    //@Pointcut("cflow(execution(@com.vc.museums.aspects.annotations.InvocationLimitation+.new (..)))")
    public void constructorLimitation()
    {

    }

    @Pointcut("execution(@com.vc.museums.aspects.annotations.InvocationLimitation * *(..))")
    public void annotatedInvocation()
    {

    }

    @Around("annotatedInvocation()")
    //@Around("execution(@com.vc.museums.aspects.annotations.InvocationLimitation * *(..))")
    public void advice(JoinPoint joinPoint)
    {
        //throw new Throwable();
        System.err.println("annotated method invoked");
        //return null;
    }
}

Это все компилируется с помощью мавен плагином aspectj-maven-plugin. Компиляция проходит без ошибок, но вызовы помеченного метода из теста не палятся:
Код

package com.vc.museums.tests;

import com.vc.museums.model.entities.information.PieceOfNewsImpl;
import org.junit.Test;

import java.util.Date;

/**
 * todo class javadoc
 * <p/>
 * Date: 11.03.2010<br />
 * Time: 15:27:20<br />
 *
 * @author maxpayne
 * @version 1.0
 */
public class AspectsTest
{
    @Test
    public void testConstructorInvocationIntercepted() throws Exception
    {
        System.err.println("test invocation");
        PieceOfNewsImpl n = new PieceOfNewsImpl();
        n.setNewsDate(new Date(System.currentTimeMillis()));
    }
}

Первый поинткат палит вызовы конструктора класса, а второй, который должен палить вызовы помеченных аннотацией методов, не работает. Кто подскажет почему?

Это сообщение отредактировал(а) MaxPayneC - 12.3.2010, 10:58
PM   Вверх
MaxPayneC
Дата 12.3.2010, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 5
Всего: 9



Проблема решилась - убрал abstract из заголовка класса с аспектом.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.