Есть аннотация: Код | 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
|