location="${aspectj.modules.dir}/ajde/src/main/resources/org/aspectj/ajde/resources/actions"
/>
<property name="include.devguide.icons"
- value="build.gif,openConfig.gif,browseroptions.gif"
+ value="build.png,openConfig.png,browseroptions.png"
/>
<!-- callers of xml-html use these by default -->
<param name="guide.dir" value="progguide" />
<param name="guide.name" value="progguide" />
<param name="xml-html-copy"
- value="dd_arrow.gif,aspects.gif,figureUML.gif,overview.gif,telecom.gif,aspectj-docs.css"/>
+ value="dd_arrow.png,aspects.png,figureUML.png,overview.png,telecom.png,aspectj-docs.css"/>
</antcall>
</target>
<param name="guide.dir" value="adk15notebook" />
<param name="guide.name" value="adk15notebook" />
<param name="xml-html-copy"
- value="dd_arrow.gif,aspectj-docs.css"/>
+ value="dd_arrow.png,aspectj-docs.css"/>
</antcall>
</target>
<antcall target="build-guide">
<param name="xml-html-copy"
- value="dd_arrow.gif,aspectj-docs.css,ajbrowser-building.gif,ajbrowser-options.gif,${include.devguide.icons}"
+ value="dd_arrow.png,aspectj-docs.css,ajbrowser-building.png,ajbrowser-options.png,${include.devguide.icons}"
/>
<param name="guide.dir" value="devguide" />
<param name="guide.name" value="devguide" />
<antcall target="build-guide">
<param name="xml-html-copy"
- value="dd_arrow.gif,aspectj-docs.css,ajbrowser-building.gif,ajbrowser-options.gif,${include.pdguide.icons}"
+ value="dd_arrow.png,aspectj-docs.css,ajbrowser-building.png,ajbrowser-options.png,${include.pdguide.icons}"
/>
<param name="guide.dir" value="pdguide" />
<param name="guide.name" value="pdguide" />
<antcall target="build-pdf">
<param name="xml-html-copy"
- value="ajbrowser-building.gif,ajbrowser-options.gif,${include.devguide.icons}"
+ value="ajbrowser-building.png,ajbrowser-options.png,${include.devguide.icons}"
/>
<param name="guide.dir" value="devguide" />
<param name="guide.name" value="devguide" />
runtime and must be redistributed with any system built using AspectJ.
This module has no external dependencies and produces a tiny ~30KB jar.
-image:images/overview.gif[image]
+image:images/overview.png[image]
The AspectJ compiler accepts both AspectJ bytecode and source code and
produces pure Java bytecode as a result. Internally it has two stages.
When parsed, this program will produce the following tree.
-image:images/top-tree.gif[image]
+image:images/top-tree.png[image]
==== PointcutDeclaration processing
pointcut entries(Main o): execution(void doit()) && this(o);
....
-image:images/pointcut-dec.gif[image]
+image:images/pointcut-dec.png[image]
The pointcut declaration is implemented as a subtype of a method
declaration. The actual pointcut is parsed by the weaver module. This
are added for the special thisJoinPoint forms that could be used in the
body.
-image:images/advice-dec.gif[image]
+image:images/advice-dec.png[image]
At this point the statements field which will hold the body of the
advice is still null. This field is not filled in until the second stage
The main classes in this module are shown in the following diagram:
-image:images/ajdt-uml.gif[image]
+image:images/ajdt-uml.png[image]
=== Weaving back-end (weaver)
The diagram below gives an overview of the aspects and their interaction
with the class `Point`.
-image:images/aspects.gif[image]
+image:images/aspects.png[image]
===== The `CloneablePoint` aspect
customers will involve more than one connection. A customer may be
involved in many calls at one time.
-image:images/telecom.gif[image]
+image:images/telecom.png[image]
===== The `Customer` class
is also a `Display`. Most example programs later in this chapter are
based on this system as well.
-image:images/figureUML.gif[ UML for the `FigureEditor` example ]
+image:images/figureUML.png[ UML for the `FigureEditor` example ]
The motivation for AspectJ (and likewise for aspect-oriented
programming) is the realization that there are issues or concerns that
-<!--
+<!--
This build script will create a directory called burn that is
_almost_ suitable for burning onto a CD. However, there
<delete dir="${printdir}/exercises.pdf.contents" />
<mkdir dir="${printdir}/exercises.pdf.contents" />
<copy toDir="${printdir}/exercises.pdf.contents" file="index.html" />
- <copy toDir="${printdir}/exercises.pdf.contents" file="figures_classes.gif" />
+ <copy toDir="${printdir}/exercises.pdf.contents" file="figures_classes.pdf" />
<copy toDir="${printdir}/exercises.pdf.contents" file="${aj.home}/doc/quick.pdf" />
<delete dir="${printdir}/install.pdf.contents" />
</target>
<target name="event" depends="tools,exercises">
- <filter token="aj.event" value="${aj.event}" />
+ <filter token="aj.event" value="${aj.event}" />
<copy file="install.txt" toDir="${eventdir}" filtering="yes" />
</target>
<target name="tools" depends="skeleton">
<mkdir dir="${eventdir}/aspectj" />
- <filter token="aj.event" value="${aj.event}" />
+ <filter token="aj.event" value="${aj.event}" />
<copy toDir="${eventdir}/aspectj">
<fileset dir="${aj.home}" excludes="bin/**" />
</target>
</project>
-
</div>
-<img style="newpage" src="figures_classes.gif" height="900" alt="" />
+<img style="newpage" src="figures_classes.png" height="900" alt="" />
</body> </html>