123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773 |
- <appendix id="quick" xreflabel="AspectJ Quick Reference">
- <title>AspectJ Quick Reference</title>
-
- <sect1 id="quick-pointcuts">
- <title>Pointcuts</title>
-
- <informaltable frame="none">
- <tgroup cols="2" align="left">
- <colspec colname="c1"/>
- <colspec colname="c2"/>
-
- <tbody valign="top">
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Methods and Constructors</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>call(<replaceable>Signature</replaceable>)</literal>
- </entry>
-
- <entry>
- every call to any method or constructor matching
- <replaceable>Signature</replaceable> at the call site
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>execution(<replaceable>Signature</replaceable>)</literal>
- </entry>
-
- <entry>
- every execution of any method or constructor matching
- <replaceable>Signature</replaceable>
- </entry>
- </row>
-
-
- <!-- ===== -->
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Fields</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>get(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- every reference to any field matching <replaceable>Signature</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>set(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- every assignment to any field matching
- <replaceable>Signature</replaceable>. The assigned value can
- be exposed with an <literal>args</literal> pointcut
- </entry>
- </row>
-
- <!-- ===== -->
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Exception Handlers</emphasis>
- </entry>
- </row>
-
- <row rowsep="1">
- <entry>
- <literal>handler(<replaceable>TypePattern</replaceable>)</literal>
- </entry>
- <entry>
- every exception handler for any <literal>Throwable</literal>
- type in <replaceable>TypePattern</replaceable>. The exception
- value can be exposed with an <literal>args</literal> pointcut
- </entry>
- </row>
-
- <!-- ===== -->
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Advice</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>adviceexecution()</literal>
- </entry>
- <entry>
- every execution of any piece of advice
- </entry>
- </row>
-
- <!-- ===== -->
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Initialization</emphasis>
- </entry>
- </row>
-
- <row rowsep="1">
- <entry>
- <literal>staticinitialization(<replaceable>TypePattern</replaceable>)</literal>
- </entry>
- <entry>
- every execution of a static initializer for any type in
- <replaceable>TypePattern</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>initialization(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- every initialization of an object when the first constructor
- called in the type matches
- <replaceable>Signature</replaceable>, encompassing the return
- from the super constructor call to the return of the
- first-called constructor
- </entry>
- </row>
- <row>
- <entry>
- <literal>preinitialization(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- every pre-initialization of an object when the first
- constructor called in the type matches
- <replaceable>Signature</replaceable>, encompassing the entry
- of the first-called constructor to the call to the super
- constructor
- </entry>
- </row>
-
- <!-- ===== -->
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Lexical</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>within(<replaceable>TypePattern</replaceable>)</literal>
- </entry>
- <entry>
- every join point from code defined in a type in
- <replaceable>TypePattern</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>withincode(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- every join point from code defined in a method or constructor
- matching <replaceable>Signature</replaceable>
- </entry>
- </row>
- </tbody>
- </tgroup>
-
- <tgroup cols="2" align="left">
- <colspec colname="c1"/>
- <colspec colname="c2"/>
- <tbody valign="top">
- <row>
- <entry namest="c1" nameend="c2" >
- <emphasis role="bold">Instanceof checks and context exposure</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>this(<replaceable>Type</replaceable> or <replaceable>Id</replaceable>)</literal>
- </entry>
- <entry>
- every join point when the currently executing object is an
- instance of <replaceable>Type</replaceable> or
- <replaceable>Id</replaceable>'s type
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>target(<replaceable>Type</replaceable> or <replaceable>Id</replaceable>)</literal>
- </entry>
- <entry>
- every join point when the target executing object is an
- instance of <replaceable>Type</replaceable> or
- <replaceable>Id</replaceable>'s type
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>args(<replaceable>Type</replaceable> or
- <replaceable>Id</replaceable>, ...)</literal>
- </entry>
- <entry>
- every join point when the arguments are instances of
- <replaceable>Type</replaceable>s or the types of the
- <replaceable>Id</replaceable>s
- </entry>
- </row>
-
- <!-- ===== -->
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Control Flow</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>cflow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- every join point in the control flow of each join point
- <replaceable>P</replaceable> picked out by
- <replaceable>Pointcut</replaceable>, including
- <replaceable>P</replaceable> itself
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>cflowbelow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- every join point below the control flow of each join point
- <replaceable>P</replaceable> picked out by
- <replaceable>Pointcut</replaceable>; does not include
- <replaceable>P</replaceable> itself
- </entry>
- </row>
-
- <!-- ===== -->
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Conditional</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>if(<replaceable>Expression</replaceable>)</literal>
- </entry>
- <entry>
- every join point when the boolean
- <replaceable>Expression</replaceable> is
- <literal>true</literal>
- </entry>
- </row>
- </tbody>
- </tgroup>
-
- <tgroup cols="2" align="left">
- <colspec colname="c1"/>
- <colspec colname="c2"/>
-
- <tbody valign="top">
- <row>
- <entry namest="c1" nameend="c2">
- <emphasis role="bold">Combination</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>! <replaceable>Pointcut</replaceable></literal>
- </entry>
- <entry>
- every join point not picked out by
- <replaceable>Pointcut</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal><replaceable>Pointcut0</replaceable> <![CDATA[&&]]> <replaceable>Pointcut1</replaceable></literal>
- </entry>
- <entry>
- each join point picked out by both
- <replaceable>Pointcut0</replaceable> and
- <replaceable>Pointcut1</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal><replaceable>Pointcut0</replaceable> || <replaceable>Pointcut1</replaceable></literal>
- </entry>
- <entry>
- each join point picked out by either
- <replaceable>Pointcut0</replaceable> or
- <replaceable>Pointcut1</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>( <replaceable>Pointcut</replaceable> )</literal>
- </entry>
- <entry>
- each join point picked out by
- <replaceable>Pointcut</replaceable>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <!-- ============================== -->
-
- <sect1 id="quick-typePatterns">
- <title>Type Patterns</title>
-
- <para>
- A type pattern is one of
- </para>
-
- <informaltable frame="none">
- <tgroup cols="2" >
- <tbody valign="top">
- <row>
- <entry><replaceable>TypeNamePattern</replaceable></entry>
- <entry>all types in <replaceable>TypeNamePattern</replaceable></entry>
- </row>
- <row>
- <entry><replaceable>SubtypePattern</replaceable></entry>
- <entry>all types in <replaceable>SubtypePattern</replaceable>, a
- pattern with a +. </entry>
- </row>
- <row>
- <entry><replaceable>ArrayTypePattern</replaceable></entry>
- <entry>all types in <replaceable>ArrayTypePattern</replaceable>,
- a pattern with one or more []s. </entry>
- </row>
- <row>
- <entry><literal>!<replaceable>TypePattern</replaceable></literal></entry>
- <entry>all types not in <replaceable>TypePattern</replaceable></entry>
- </row>
- <row>
- <entry><literal><replaceable>TypePattern0</replaceable>
- <![CDATA[&&]]> <replaceable>TypePattern1</replaceable></literal></entry>
- <entry>all types in both
- <replaceable>TypePattern0</replaceable> and <replaceable>TypePattern1</replaceable></entry>
- </row>
- <row>
- <entry><literal><replaceable>TypePattern0</replaceable> || <replaceable>TypePattern1</replaceable></literal></entry>
- <entry>all types in either
- <replaceable>TypePattern0</replaceable> or <replaceable>TypePattern1</replaceable></entry>
- </row>
- <row>
- <entry><literal>( <replaceable>TypePattern</replaceable> )</literal></entry>
- <entry>all types in <replaceable>TypePattern</replaceable></entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>
- where <replaceable>TypeNamePattern</replaceable> can either be a
- plain type name, the wildcard <literal>*</literal> (indicating all
- types), or an identifier with embedded <literal>*</literal> and
- <literal>..</literal> wildcards.
- </para>
-
- <para>
- An embedded <literal>*</literal> in an identifier matches any
- sequence of characters, but does not match the package (or
- inner-type) separator ".".
- </para>
-
- <para>
- An embedded <literal>..</literal> in an identifier matches any
- sequence of characters that starts and ends with the package (or
- inner-type) separator ".".
- </para>
- </sect1>
-
- <!-- ============================== -->
-
- <sect1 id="quick-advice">
- <title>Advice</title>
-
- <para>
- Each piece of advice is of the form
-
- <blockquote>
- <literal>[ strictfp ] <replaceable>AdviceSpec</replaceable>
- [ throws <replaceable>TypeList</replaceable> ] :
- <replaceable>Pointcut</replaceable> {
- <replaceable>Body</replaceable> } </literal>
- </blockquote>
-
- where <replaceable>AdviceSpec</replaceable> is one of
- </para>
-
- <variablelist>
- <varlistentry>
- <term>
- <literal>before( <replaceable>Formals</replaceable> ) </literal>
- </term>
- <listitem>
- runs before each join point
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>after( <replaceable>Formals</replaceable> ) returning
- [ ( <replaceable>Formal</replaceable> ) ] </literal>
- </term>
- <listitem>
- runs after each join point that returns normally. The
- optional formal gives access to the returned value
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>after( <replaceable>Formals</replaceable> ) throwing [
- ( <replaceable>Formal</replaceable> ) ] </literal>
- </term>
- <listitem>
- runs after each join point that throws a
- <literal>Throwable</literal>. If the optional formal is
- present, runs only after each join point that throws a
- <literal>Throwable</literal> of the type of
- <replaceable>Formal</replaceable>, and
- <replaceable>Formal</replaceable> gives access to the
- <literal>Throwable</literal> exception value
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <literal>after( <replaceable>Formals</replaceable> ) </literal>
- </term>
- <listitem>
- runs after each join point regardless of whether it returns
- normally or throws a <literal>Throwable</literal>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal><replaceable>Type</replaceable>
- around( <replaceable>Formals</replaceable> ) </literal>
- </term>
- <listitem>
- runs in place of each join point. The join point can be
- executed by calling <literal>proceed</literal>, which takes
- the same number and types of arguments as the around advice.
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>
- Three special variables are available inside of advice bodies:
- </para>
-
- <variablelist>
- <varlistentry>
- <term>
- <literal>thisJoinPoint</literal>
- </term>
- <listitem>
- an object of type <ulink
- url="../api/org/aspectj/lang/JoinPoint.html"><literal>org.aspectj.lang.JoinPoint</literal></ulink>
- representing the join point at which the advice is executing.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>thisJoinPointStaticPart</literal>
- </term>
- <listitem>
- equivalent to <literal>thisJoinPoint.getStaticPart()</literal>,
- but may use fewer runtime resources.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>thisEnclosingJoinPointStaticPart</literal>
- </term>
- <listitem>
- the static part of the dynamically enclosing join point.
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <!-- ============================== -->
-
- <sect1 id="quick-interType">
- <title>Inter-type member declarations</title>
-
- <para>
- Each inter-type member is one of
- </para>
-
- <variablelist>
- <varlistentry>
- <term>
- <literal>
- <replaceable>Modifiers ReturnType OnType . Id</replaceable>
- ( <replaceable>Formals</replaceable> )
- [ throws <replaceable>TypeList</replaceable> ]
- { <replaceable>Body</replaceable> }
- </literal>
- </term>
- <listitem>
- a method on <replaceable>OnType</replaceable>.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>
- abstract <replaceable>Modifiers ReturnType OnType . Id</replaceable>
- ( <replaceable>Formals</replaceable> )
- [ throws <replaceable>TypeList</replaceable> ] ;
- </literal>
- </term>
- <listitem>
- an abstract method on <replaceable>OnType</replaceable>.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>
- <replaceable>Modifiers OnType . </replaceable> new
- ( <replaceable>Formals</replaceable> )
- [ throws <replaceable>TypeList</replaceable> ]
- { <replaceable>Body</replaceable> }
- </literal>
- </term>
- <listitem>
- a constructor on <replaceable>OnType</replaceable>.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>
- <replaceable>Modifiers Type OnType . Id </replaceable>
- [ = <replaceable>Expression</replaceable> ] ;
- </literal>
- </term>
- <listitem>
- a field on <replaceable>OnType</replaceable>.
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <!-- ============================== -->
-
- <sect1 id="quick-other">
- <title>Other declarations</title>
-
- <variablelist>
- <varlistentry>
- <term>
- <literal>
- declare parents :
- <replaceable>TypePattern</replaceable> extends
- <replaceable>Type</replaceable> ;
- </literal>
- </term>
- <listitem>
- the types in <replaceable>TypePattern</replaceable> extend
- <replaceable>Type</replaceable>.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>
- declare parents : <replaceable>TypePattern</replaceable>
- implements <replaceable>TypeList</replaceable> ;
- </literal>
- </term>
- <listitem>
- the types in <replaceable>TypePattern</replaceable>
- implement the types in <replaceable>TypeList</replaceable>.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>
- declare warning : <replaceable>Pointcut</replaceable> :
- <replaceable>String</replaceable> ;
- </literal>
- </term>
- <listitem>
- if any of the join points in <replaceable>Pointcut</replaceable>
- possibly exist in the program, the compiler emits the warning
- <replaceable>String</replaceable>.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>
- declare error : <replaceable>Pointcut</replaceable> :
- <replaceable>String</replaceable> ;
- </literal>
- </term>
- <listitem>
- if any of the join points in <replaceable>Pointcut</replaceable>
- could possibly exist in the program, the compiler emits the
- error <replaceable>String</replaceable>.
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <literal>
- declare soft :
- <replaceable>Type</replaceable> :
- <replaceable>Pointcut</replaceable> ;
- </literal>
- </term>
- <listitem>
- any <replaceable>Type</replaceable> exception
- that gets thrown at any join point picked out by
- <replaceable>Pointcut</replaceable> is wrapped in <ulink
- url="../api/org/aspectj/lang/SoftException.html"><literal>org.aspectj.lang.SoftException</literal></ulink>.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <literal>
- declare precedence :
- <replaceable>TypePatternList</replaceable> ;
- </literal>
- </term>
- <listitem>
- at any join point where multiple pieces of advice
- apply, the advice precedence at that join point is in
- <replaceable>TypePatternList</replaceable> order.
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <!-- ============================== -->
-
- <sect1 id="quick-aspectAssociations">
- <title>Aspects</title>
-
- <para>
- Each aspect is of the form
-
- <blockquote>
- <literal>
- [ privileged ] <replaceable>Modifiers</replaceable>
- aspect <replaceable>Id</replaceable>
- [ extends <replaceable>Type</replaceable> ]
- [ implements <replaceable>TypeList</replaceable> ]
- [ <replaceable>PerClause</replaceable> ]
- { <replaceable>Body</replaceable> }
- </literal>
- </blockquote>
- where <replaceable>PerClause</replaceable> defines how the aspect is
- instantiated and associated (<literal>issingleton()</literal> by
- default):
- </para>
-
- <informaltable frame="none">
- <tgroup cols="3" align="left">
- <thead>
- <row>
- <entry align="left">PerClause</entry>
- <entry align="left">Description</entry>
- <entry align="left">Accessor</entry>
- </row>
- </thead>
-
- <tbody valign="top">
- <row>
- <entry>
- [ <literal>issingleton()</literal> ]
- </entry>
- <entry>
- One instance of the aspect is made. This is
- the default.
- </entry>
- <entry>
- <literal>aspectOf()</literal> at all join points
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>perthis(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- An instance is associated with each object that is the
- currently executing object at any join point in
- <replaceable>Pointcut</replaceable>.
- </entry>
- <entry>
- <literal>aspectOf(Object)</literal> at all join points
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>pertarget(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- An instance is associated with each object that is the
- target object at any join point in
- <replaceable>Pointcut</replaceable>.
- </entry>
- <entry>
- <literal>aspectOf(Object)</literal> at all join points
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>percflow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- The aspect is defined for each entrance to the control flow of
- the join points defined by <replaceable>Pointcut</replaceable>. </entry>
- <entry>
- <literal>aspectOf()</literal> at join points in
- <literal>cflow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>percflowbelow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- The aspect is defined for each entrance to the control flow
- below the join points defined by <replaceable>Pointcut</replaceable>.
- </entry>
- <entry>
- <literal>aspectOf()</literal> at join points in
- <literal>cflowbelow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- </appendix>
|