Aspectj Cookbook
Recipe 7.1. Capturing a Call to a Constructor
Problem
You want to capture when a call to a constructor that matches a specific signature is invoked. Solution
Use the call(Signature) pointcut with the additional new keyword as part of the signature. The syntax for using the call(Signature) pointcut in relation to constructors is: pointcut <pointcut name>(<any values to be picked up>) : call(<optional modifier> <class>.new(<parameter types>)); Discussion
The call(Signature) pointcut has three key characteristics when used to capture calls to constructors:
Example 7-1 shows how to use the call(Signature) pointcut to capture calls to the constructor on the MyClass class that takes an int and String as parameters. Example 7-1. Using the call(Signature) pointcut to capture join points when a constructor is called
public aspect CallNewRecipe { /* Specifies calling advice when any constructor is called that meets the following signature rules: Class Name: MyClass Method Name: new (This is a keyword indicating the constructor call) Method Parameters: int, String */ pointcut myClassConstructorWithIntAndStringPointcut( ) : call(MyClass.new (int, String)); // Advice declaration before( ) : myClassConstructorWithIntAndStringPointcut( ) { System.out.println( "-------------- Aspect Advice Logic ---------------"); System.out.println( "In the advice picked by " + "myClassConstructorWithIntAndOthersPointcut( )"); System.out.println( "The current type of object under construction is: "); System.out.println(thisJoinPoint.getThis( )); System.out.println( "Signature: " + thisJoinPoint.getSignature( )); System.out.println( "Source Line: " + thisJoinPoint.getSourceLocation( )); System.out.println( "--------------------------------------------------"); } }
Figure 7-1 shows how the call(Signature) pointcut is applied. Figure 7-1. How the call(Signature) pointcut is applied to constructors
See Also
The execution(Signature) and call(Signature) pointcuts in Recipes Recipe 4.1 and Recipe 4.4 respectively deal with attaching advice to methods other than constructors; Recipe 4.1 shows some of the wildcard variations that can be used in a Signature; Chapter 13 deals with the environments available to the advice when picked by the different pointcuts; Recipe 20.2 describes in more detail the use of the around( ) advice, specifically in dealing with overriding constructors to return a different type of object. |