2003 Contributors. All rights reserved.
</para>
<!-- todo Update me! -->
- <para>Last updated February 26, 2003.
+ <para>Last updated March 3, 2003.
</para>
<para>
of modularity is the class. In AspectJ, aspects modularize concerns that
affect more than one class.
</para>
- <para> AspectJ includes a compiler (<literal>ajc</literal>), a
- debugger (<literal>ajdb</literal>), a documentation generator
- (<literal>ajdoc</literal>), a program structure browser
- (<literal>ajbrowser</literal>), and integration
- with Eclipse, Sun-ONE/Netbeans, GNU Emacs/XEmacs, JBuilder, and Ant.
- </para>
- <para>You compile your program using the AspectJ compiler (perhaps using
- the supported development environments) and then run it, supplying
- a small (< 100K) runtime library.
+ <para>You compile your program using the AspectJ compiler
+ (perhaps using the supported development environments)
+ and then run it,
+ supplying a small (< 100K) runtime library.
+ </para>
+ <para>The AspectJ technologies include
+ a compiler (<literal>ajc</literal>),
+ a debugger (<literal>ajdb</literal>),
+ a documentation generator (<literal>ajdoc</literal>),
+ a program structure browser (<literal>ajbrowser</literal>),
+ and integration with
+ Eclipse, Sun-ONE/Netbeans, GNU Emacs/XEmacs,
+ JBuilder, and Ant.
</para>
</answer>
</qandaentry>
</answer>
</qandaentry>
</qandadiv>
+ <qandadiv id="Technology" xreflabel="Understanding AspectJ Technology">
+ <title>Understanding AspectJ Technology</title>
+ <qandaentry>
+ <question id="q:implementation"
+ xreflabel="Q:Do I need to know how the compiler works?">
+ <para>Do I need to know how the compiler or weaver works?
+ </para>
+ </question>
+ <answer>
+ <para>Writing AspectJ programs only requires understanding the
+ <ulink url="progguide/index.html">Programming Guide</ulink>.
+ However, current implementations do not control everything in
+ a system, so AspectJ program semantics may be limited to code
+ the implementation controls. For our implementation, these
+ limitations are stated in
+ <ulink url="progguide/apc.html">
+ Programming Guide Appendix C</ulink>.
+ Aside from understanding the use and limitations of the
+ implementation, there is no need to understand the underlying
+ technology when writing AspectJ programs.
+ </para>
+ <para>
+ The technology that implements AspectJ interests
+ some academic researchers and some developers
+ who want new features or new ways to weave.
+ These extensions are not discussed in the documentation.
+ Some are being developed already,
+ others are on the drawing board (or perhaps were left off
+ long ago), and still others haven't been considered.
+ If you are interested in a certain extension,
+ check the bug database for feature requests
+ and the mailing list archives for any past discussions.
+ Then email the list to see if it's been considered.
+ For more information, see
+ <xref linkend="Developers"/>.
+ </para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question id="q:whitepapers"
+ xreflabel="Q:How does the compiler/weaver work? Are there any white papers?">
+ <para>How does the compiler/weaver work? Are there any white papers?
+ </para>
+ </question>
+ <answer>
+ <para>
+ There are currently no documents describing this process in any detail.
+ Currently, the best way to understand this is to compile programs and
+ then inspect the generated source or bytecode. Many people have found
+ this very effective for understanding the weaving model. You also have
+ access to the source code for a different perspective. (See
+ <xref linkend="Developers"/>).
+ We hope to write
+ a couple of papers on the bytecode weaving model used in AspectJ-1.1 if
+ we can ever find the free time.
+ </para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question id="q:reflection"
+ xreflabel="Q:Does AspectJ use reflection at runtime?">
+ <para>Does AspectJ use reflection at runtime?
+ </para>
+ </question>
+ <answer>
+ <para>
+ The only time that reflection is used during run-time is when the special
+ thisJoinPoint object is used to discover reflective information about the
+ join point. If you don't use thisJoinPoint then no reflection will be used.
+ </para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question id="q:loadtimeWeaving"
+ xreflabel="Q:What about load-time weaving? Can I weave aspects at runtime?">
+ <para>What about load-time weaving? Can I weave aspects at runtime?
+ </para>
+ </question>
+ <answer>
+ <para>Not now, but it should be possible soon.
+ AspectJ 1.1 can weave binary aspects
+ into classes in bytecode form. Hooked up to a class loader,
+ this can weave class bytecodes after they are read in,
+ before the
+ class is defined by the VM. In the final 1.1 release,
+ we hope to document a small class loader as a proof-of-concept,
+ but we expect most people will already have a custom
+ class loader which they will adapt to invoke our weaver.
+ </para>
+ <para>Some have asked about only weaving classes specified
+ at run-time.
+ Aspects should work across an entire namespace, and problems
+ will likely result from weaving
+ some classes but not others. Also, it's confusing to
+ specify crosscutting both in the aspect and in the
+ list of runtime classes; the crosscutting specification
+ should be in the aspect itself,
+ where it can be processed by tools.
+ </para>
+ <para>And just to state the obvious:
+ do not use bytecode weaving, at load-time or otherwise,
+ to modify .class files protected by license,
+ without permission from the licensor.
+ </para>
+ </answer>
+ </qandaentry>
+ </qandadiv>
<qandadiv id="Developers" xreflabel="AspectJ Project Development">
<title>AspectJ Project Development</title>
<qandaentry>
</listitem>
</itemizedlist>
</para>
- <para>
- </para>
</answer>
</qandaentry>
<qandaentry>
Entries changes to reflect the move are not listed here.
Other entries changed since the earlier November 26 version:
<itemizedlist>
+ <listitem><para><xref linkend="q:implementation"/></para></listitem>
+ <listitem><para><xref linkend="q:whitepapers"/></para></listitem>
+ <listitem><para><xref linkend="q:reflection"/></para></listitem>
+ <listitem><para><xref linkend="q:loadtimeWeaving"/></para></listitem>
<listitem><para><xref linkend="q:adviseconstructors"/></para></listitem>
<listitem><para><xref linkend="q:whyeclipse"/></para></listitem>
<listitem><para><xref linkend="q:eclipserequired"/></para></listitem>