First make the aspect abstract:

public abstract aspect X {
  pointcut p(): within(Foo);
  before(): execution(* *(..)) && p() {
    System.out.println(thisJoinPoint);
  }
}

But notice the point cut is not abstract, it has a value, that can be 
overridden in the concrete aspect. So this is the default value.

If I declare an aop.xml that concretizes the aspect but does not provide a 
point cut:

<aspectj>
<aspects>
<concrete-aspect name="Y" extends ="X">
</concrete-aspect>
</aspects>
<weaver options="-debug -showWeaveInfo"/>
</aspectj>

Then p() will be within(Foo) for application of my concrete aspect.

If I instead fill in a new value for p():

<aspectj>
<aspects>
<concrete-aspect name="Y" extends ="X">
  <pointcut name="p" expression="within(Bar)"/>
</concrete-aspect>
</aspects>
<weaver options="-debug -showWeaveInfo"/>
</aspectj>

Then that will be used instead of within(Foo). But you must at least concretize 
the aspect - a purely abstract aspect will not be applied even if referenced 
via <aspect…/>

Cheers,
Andy

> On Nov 22, 2018, at 6:29 AM, Mikael Petterson <[email protected]> 
> wrote:
> 
> Hi,
> 
> I have the following aspect:
> 
> public aspect DeprecatedMethodsAspect  {
>         
>     private  Collector collector = new DeprecatedMethodsListener();
>     
>     //Only allow a default constructor with no args.
> 
>     //Pointcuts to match joinpoint.
>     pointcut deprecated() :
>         !within(com.mylibrary.aspects.*) && @annotation(java.lang.Deprecated) 
> && (call(public * *(..)) || call(*.new(..)));
> 
>     pointcut beta() :
>         @annotation(com.google.common.annotations.Beta);
> 
>     pointcut deprecatedMethods() :
>         deprecated() && !beta();
>         
> 
>     before() : deprecatedMethods() {
>         collector.collect(thisJoinPoint);
>     }
> 
> }
> 
> I want to be able to select only packages in the application running with 
> this aspect. So I want to have a default pointcut that is used by most users 
> but with the possibility to override it.
> 
> I was thinking of defining abstract pointcuts ( then aspect needs to be 
> abstract as well) like:
> 
> protected abstract pointcut excludedPackages();
> protected abstract pointcut includedPackages();
> Then I can define them in the aop.xml
> 
> But what is the best way to provide a default value/values ( if multiple 
> packages).
> 
> br,
> 
> //mikael
>  
> _______________________________________________
> aspectj-users mailing list
> [email protected] <mailto:[email protected]>
> To change your delivery options, retrieve your password, or unsubscribe from 
> this list, visit
> https://www.eclipse.org/mailman/listinfo/aspectj-users 
> <https://www.eclipse.org/mailman/listinfo/aspectj-users>
_______________________________________________
aspectj-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://www.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to